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