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