From ae4e87df37ed8904de92c7cf2f3a11128cda2a21 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 6 Apr 2013 13:14:41 +0200 Subject: tagging ychat-0.7.4.1 --- src/thrd/pool.h | 98 ++++++++++++++++++++++++++------------------------------- 1 file changed, 44 insertions(+), 54 deletions(-) mode change 100644 => 100755 src/thrd/pool.h (limited to 'src/thrd/pool.h') diff --git a/src/thrd/pool.h b/src/thrd/pool.h old mode 100644 new mode 100755 index 87b73c2..c4dcd21 --- a/src/thrd/pool.h +++ b/src/thrd/pool.h @@ -1,27 +1,3 @@ -/*:* - *: File: ./src/thrd/pool.h - *: - *: yChat; Homepage: www.yChat.org; Version 0.8.3-CURRENT - *: - *: Copyright (C) 2003 Paul C. Buetow, Volker Richter - *: Copyright (C) 2004 Paul C. Buetow - *: Copyright (C) 2005 EXA Digital Solutions GbR - *: - *: This program is free software; you can redistribute it and/or - *: modify it under the terms of the GNU General Public License - *: as published by the Free Software Foundation; either version 2 - *: of the License, or (at your option) any later version. - *: - *: This program is distributed in the hope that it will be useful, - *: but WITHOUT ANY WARRANTY; without even the implied warranty of - *: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - *: GNU General Public License for more details. - *: - *: You should have received a copy of the GNU General Public License - *: along with this program; if not, write to the Free Software - *: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - *:*/ - #include "../incl.h" #ifndef POOL_H @@ -29,46 +5,60 @@ using namespace std; -struct task -{ - void(*p_func)(void*); - void *p_void; - - task(void(*p_func)(void*), void *p_void) - { - this->p_func = p_func; - this->p_void = p_void; - } -}; - class pool { private: - friend class thro; + static int i_thrd_used; + typedef struct tpool_work { + void (*routine)(void*); /// + void *p_void; + struct tpool_work *next; + } + tpool_work_t; - static pthread_mutex_t mut_threads; - static pthread_mutex_t mut_queue_tasks; - static pthread_mutex_t mut_num_avail_threads; - static pthread_cond_t cond_new_task; + typedef struct tpool + { + // pool characteristics: + int num_threads; + int max_queue_size; - static int i_num_avail_threads; - static int i_num_total_threads; + // pool state + pthread_t *threads; + int cur_queue_size; - static int i_max_queue_size; - static int i_cur_queue_index; - static int i_free_queue_index; - static task** queue_tasks; + tpool_work_t *queue_head; + tpool_work_t *queue_tail; - static int increase_pool(int i_num); - static void* wait_for_task(void *p_void); - static void run_func(void *p_void); + pthread_mutex_t queue_lock; + pthread_cond_t queue_not_empty; + pthread_cond_t queue_not_full; + pthread_cond_t queue_empty; + } + *tpool_t; + + int i_thrd_pool_size; + int i_thrd_pool_queue; + + tpool_t thread_pool; + + void tpool_init( tpool_t *tpoolp, int num_worker_threads, int max_queue_size); + int tpool_add_work( tpool_t tpool, void(*routine)(void*), void* p_void ); + static void* tpool_thread( void *p_void); + static void run_func( void *p_void ); public: - static void init(); - static void destroy(); + pool(); - static void run(void* p_void); - static bool allow_user_login(); + // inline (speed)! + void run( void *p_void ) + { + tpool_add_work( thread_pool, run_func, p_void ); + } + +#ifdef NCURSES + void print_pool_size(); + static void print_threads(int i_thrd_used); +#endif }; #endif -- cgit v1.2.3