diff options
| author | Paul Buetow <paul@buetow.org> | 2013-04-06 13:14:46 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2013-04-06 13:14:46 +0200 |
| commit | 56187184e11b085b82584d3b088c62f427aae83c (patch) | |
| tree | 8f8387e750a62581966900a42dade265d34c3146 /src/thrd/pool.h | |
| parent | d3a0d11f93c1ebe38b4301c9bef952bfd24d01a1 (diff) | |
tagging yhttpd-0.7.1yhttpd-0.7.1
Diffstat (limited to 'src/thrd/pool.h')
| -rwxr-xr-x | src/thrd/pool.h | 82 |
1 files changed, 52 insertions, 30 deletions
diff --git a/src/thrd/pool.h b/src/thrd/pool.h index 3a5f7b6..a744133 100755 --- a/src/thrd/pool.h +++ b/src/thrd/pool.h @@ -3,52 +3,74 @@ #ifndef POOL_H #define POOL_H -#include <queue> - using namespace std; class pool { private: - friend class thro; - - struct task - { - void(*p_func)(void*); - void *p_void; + typedef struct tpool_work + { + void (*routine)(void*); /// + void *arg; + struct tpool_work *next; + } + tpool_work_t; - task(void(*p_func)(void*), void *p_void) + typedef struct tpool { - this->p_func = p_func; - this->p_void = p_void; + // pool characteristics: + int num_threads; + int max_queue_size; + int do_not_block_when_full; + + // pool state + pthread_t *threads; + int cur_queue_size; + + tpool_work_t *queue_head; + tpool_work_t *queue_tail; + + pthread_mutex_t queue_lock; + pthread_cond_t queue_not_empty; + pthread_cond_t queue_not_full; + pthread_cond_t queue_empty; + + int queue_closed; + int shutdown; } - }; + *tpool_t; - pthread_mutex_t mut_threads; - pthread_mutex_t mut_queue_tasks; - pthread_mutex_t mut_num_avail_threads; - pthread_cond_t cond_new_task; + int i_thrd_pool_size; + int i_thrd_pool_queue; - int i_num_avail_threads; - int i_num_total_threads; + tpool_t thread_pool; - queue<task*> queue_tasks; + void + tpool_init( tpool_t *tpoolp, int num_worker_threads, int max_queue_size, int do_not_block_when_full ); - int increase_pool(int i_num); - void add_task( void(*p_func)(void*), void* p_void ); - static void* wait_for_task(void *p_void); - static void run_func(void *p_void); + int + tpool_add_work( tpool_t tpool, void(*routine)(void*), void* arg ); -public: - pool(); - ~pool(); + // virtual void + // tpool_destroy( tpool_t tpoolp, int finish ); - void run(void* p_void); - bool allow_user_login(); + static void* + tpool_thread( void* arg); -#ifdef NCURSES + static void + run_func( void *v_pointer ); + + // public methods: +public: + pool( ); - void print_pool_size(); + // inline (speed)! + void run( void *arg ) + { + tpool_add_work( thread_pool, run_func, arg ); + } +#ifdef NCURSES + void print_pool_size(); #endif }; |
