00001 00002 #ifndef MICROFEED_THREADS_H 00003 #define MICROFEED_THREADS_H 00004 00020 typedef struct _MicrofeedThread MicrofeedThread; 00021 00022 typedef struct _MicrofeedThreadPool MicrofeedThreadPool; 00023 00027 typedef struct _MicrofeedMutex MicrofeedMutex; 00028 00029 typedef void* (*MicrofeedThreadFunction)(void* data); 00030 00031 typedef void (*MicrofeedThreadExitCallback)(MicrofeedThread* thread, void* user_data); 00032 00033 typedef struct { 00034 void* (*thread_new)(MicrofeedThreadFunction function, void* data); 00035 void (*thread_free)(void* thread_implementation); 00036 void* (*thread_get_current)(void); 00037 void (*thread_send_signal)(void* thread_implementation, int signal_number); 00038 void (*thread_join)(void* thread_implementation); 00039 void* (*mutex_new)(void); 00040 void (*mutex_free)(void* mutex_implementation); 00041 void (*mutex_lock)(void* mutex_implementation); 00042 void (*mutex_unlock)(void* mutex_implementation); 00043 } MicrofeedThreadFunctions; 00044 00045 void microfeed_thread_set_functions(MicrofeedThreadFunctions* thread_functions); 00046 00047 void microfeed_thread_init(void); 00048 void microfeed_thread_cleanup(void); 00049 00050 MicrofeedThread* microfeed_thread_new(MicrofeedThreadFunction function, void* data); 00051 MicrofeedThread* microfeed_thread_new_with_exit_callback(MicrofeedThreadFunction function, void* data, MicrofeedThreadExitCallback exit_callback, void* user_data); 00052 void microfeed_thread_free(MicrofeedThread* thread); 00053 MicrofeedThread* microfeed_thread_ref(MicrofeedThread* thread); 00054 void microfeed_thread_unref(MicrofeedThread* thread); 00055 00056 MicrofeedThread* microfeed_thread_get_current(void); 00057 void microfeed_thread_send_signal(MicrofeedThread* thread, int signal_number); 00058 void microfeed_thread_join(MicrofeedThread* thread); 00059 00060 MicrofeedThreadPool* microfeed_thread_pool_new(unsigned int maximum_thread_count); 00061 MicrofeedThreadPool* microfeed_thread_pool_new_with_exit_callback(unsigned int max_threads, MicrofeedThreadExitCallback exit_callback, void* user_data); 00062 MicrofeedThread* microfeed_thread_pool_queue_thread(MicrofeedThreadPool* thread_pool, MicrofeedThreadFunction function, void* data); 00063 MicrofeedThread* microfeed_thread_pool_queue_thread_with_exit_callback(MicrofeedThreadPool* thread_pool, MicrofeedThreadFunction function, void* data, MicrofeedThreadExitCallback exit_callback, void* user_data); 00064 unsigned int microfeed_thread_pool_get_started_thread_count(MicrofeedThreadPool* thread_pool); 00065 unsigned int microfeed_thread_pool_get_waiting_thread_count(MicrofeedThreadPool* thread_pool); 00066 void microfeed_thread_pool_set_maximum_thread_count(MicrofeedThreadPool* thread_pool, unsigned int maximum_thread_count); 00067 00068 MicrofeedMutex* microfeed_mutex_new(void); 00069 void microfeed_mutex_free(MicrofeedMutex* mutex); 00070 void microfeed_mutex_lock(MicrofeedMutex* mutex); 00071 void microfeed_mutex_unlock(MicrofeedMutex* mutex); 00072 00075 #endif