![]()  | 
  
    Nilorea Library
    
   C utilities for networking, threading, graphics 
   | 
 
Data Structures | |
| struct | THREAD_POOL | 
| Structure of a trhead pool.  More... | |
| struct | THREAD_POOL_NODE | 
| A thread pool node.  More... | |
| struct | THREAD_WAITING_PROC | 
| Structure of a waiting process item.  More... | |
Macros | |
| #define | DIRECT_PROC 4 | 
| processing mode for added func, direct start, not queued   | |
| #define | EXITED_THREAD 512 | 
| indicate that the pool is off, all jobs have been consumed   | |
| #define | EXITING_THREAD 256 | 
| indicate that the pool is exiting, unfinished jobs will finish and the pool will exit the threads and enter the EXITED state   | |
| #define | IDLE_PROC 16 | 
| status of a thread which is waiting for some proc   | |
| #define | NO_LOCK 1024 | 
| if passed to add_threaded_process, skip main table lock in case we are in a func which is already locking it   | |
| #define | NO_QUEUE 8 | 
| special processing mode for waiting_list: do not add the work in queue since it' coming from the queue   | |
| #define | NORMAL_PROC 1 | 
| processing mode for added func, synced start, can be queued   | |
| #define | RUNNING_PROC 64 | 
| status of a thread which proc is currently running   | |
| #define | RUNNING_THREAD 128 | 
| indicate that the pool is running and ready to use   | |
| #define | SYNCED_PROC 2 | 
| processing mode for added func, synced start, not queued   | |
| #define | WAITING_PROC 32 | 
| status of a thread who have proc waiting to be processed  | |
Functions | |
| int | add_threaded_process (THREAD_POOL *thread_pool, void *(*func_ptr)(void *param), void *param, int mode) | 
| add a function and params to a thread pool   | |
| int | destroy_threaded_pool (THREAD_POOL **thread_pool, unsigned int delay) | 
| delete a thread_pool, exit the threads and free the structs   | |
| long int | get_nb_cpu_cores () | 
| get number of core of current system   | |
| THREAD_POOL * | new_thread_pool (size_t nbmaxthr, size_t nb_max_waiting) | 
| Create a new pool of nbmaxthr threads.   | |
| int | refresh_thread_pool (THREAD_POOL *thread_pool) | 
| try to add some waiting DIRECT_PROCs on some free thread slots, else do nothing   | |
| int | start_threaded_pool (THREAD_POOL *thread_pool) | 
| Launch the process waiting for execution in the thread pool.   | |
| int | wait_for_synced_threaded_pool (THREAD_POOL *thread_pool) | 
| wait for all the launched process, blocking but light on the CPU as there is no polling   | |
| int | wait_for_threaded_pool (THREAD_POOL *thread_pool, unsigned int delay) | 
| Wait for all the launched process in the thread pool to terminate.   | |
| struct THREAD_POOL | 
Structure of a trhead pool.
Definition at line 78 of file n_thread_pool.h.
 Collaboration diagram for THREAD_POOL:| Data Fields | ||
|---|---|---|
| pthread_mutex_t | lock | mutex to prevent mutual access of waiting_list parameters | 
| size_t | max_threads | Maximum number of running threads in the list. | 
| size_t | nb_actives | number of threads actually doing a proc | 
| size_t | nb_max_waiting | Maximum number of waiting procedures int the list, 0 or -1 for unlimited. | 
| sem_t | nb_tasks | semaphore to store the number of tasks | 
| THREAD_POOL_NODE ** | thread_list | Dynamically allocated but fixed size thread array. | 
| LIST * | waiting_list | Waiting list handling. | 
| struct THREAD_POOL_NODE | 
A thread pool node.
Definition at line 48 of file n_thread_pool.h.
 Collaboration diagram for THREAD_POOL_NODE:Data Fields | |
| void *(* | func )(void *param) | 
| function to call in the thread   | |
| pthread_mutex_t | lock | 
| mutex to prevent mutual access of node parameters   | |
| void * | param | 
| if not NULL , passed as argument   | |
| int | state | 
| state of the proc , RUNNING_PROC when it is busy processing func( param) , IDLE_PROC when it waits for some func and param to process , WAITING_PROC when it has things waiting to be processed   | |
| sem_t | th_end | 
| thread ending semaphore   | |
| sem_t | th_start | 
| thread starting semaphore   | |
| pthread_t | thr | 
| thread id   | |
| struct THREAD_POOL * | thread_pool | 
| pointer to assigned thread pool   | |
| int | thread_state | 
| state of the managing thread , RUNNING_THREAD, EXITING_THREAD, EXITED_THREAD   | |
| int | type | 
| SYNCED or DIRECT process start.   | |
| void *(* THREAD_POOL_NODE::func) (void *param) | 
function to call in the thread
Definition at line 50 of file n_thread_pool.h.
Referenced by add_threaded_process(), new_thread_pool(), and thread_pool_processing_function().
| pthread_mutex_t THREAD_POOL_NODE::lock | 
mutex to prevent mutual access of node parameters
Definition at line 70 of file n_thread_pool.h.
Referenced by add_threaded_process(), new_thread_pool(), refresh_thread_pool(), start_threaded_pool(), thread_pool_processing_function(), and wait_for_threaded_pool().
| void* THREAD_POOL_NODE::param | 
if not NULL , passed as argument
Definition at line 53 of file n_thread_pool.h.
Referenced by add_threaded_process(), new_thread_pool(), and thread_pool_processing_function().
| int THREAD_POOL_NODE::state | 
state of the proc , RUNNING_PROC when it is busy processing func( param) , IDLE_PROC when it waits for some func and param to process , WAITING_PROC when it has things waiting to be processed
Definition at line 58 of file n_thread_pool.h.
Referenced by add_threaded_process(), new_thread_pool(), refresh_thread_pool(), start_threaded_pool(), thread_pool_processing_function(), and wait_for_threaded_pool().
| sem_t THREAD_POOL_NODE::th_end | 
thread ending semaphore
Definition at line 67 of file n_thread_pool.h.
Referenced by new_thread_pool(), thread_pool_processing_function(), and wait_for_synced_threaded_pool().
| sem_t THREAD_POOL_NODE::th_start | 
thread starting semaphore
Definition at line 65 of file n_thread_pool.h.
Referenced by add_threaded_process(), new_thread_pool(), start_threaded_pool(), and thread_pool_processing_function().
| pthread_t THREAD_POOL_NODE::thr | 
thread id
Definition at line 62 of file n_thread_pool.h.
Referenced by new_thread_pool(), and thread_pool_processing_function().
| struct THREAD_POOL* THREAD_POOL_NODE::thread_pool | 
pointer to assigned thread pool
Definition at line 73 of file n_thread_pool.h.
Referenced by new_thread_pool(), and thread_pool_processing_function().
| int THREAD_POOL_NODE::thread_state | 
state of the managing thread , RUNNING_THREAD, EXITING_THREAD, EXITED_THREAD
Definition at line 60 of file n_thread_pool.h.
Referenced by add_threaded_process(), new_thread_pool(), and thread_pool_processing_function().
| int THREAD_POOL_NODE::type | 
SYNCED or DIRECT process start.
Definition at line 56 of file n_thread_pool.h.
Referenced by add_threaded_process(), new_thread_pool(), start_threaded_pool(), and thread_pool_processing_function().
| struct THREAD_WAITING_PROC | 
Structure of a waiting process item.
Definition at line 101 of file n_thread_pool.h.
 Collaboration diagram for THREAD_WAITING_PROC:Data Fields | |
| void *(* | func )(void *param) | 
| function to call in the thread   | |
| void * | param | 
| if not NULL , passed as argument   | |
| void *(* THREAD_WAITING_PROC::func) (void *param) | 
function to call in the thread
Definition at line 103 of file n_thread_pool.h.
Referenced by add_threaded_process(), and refresh_thread_pool().
| void* THREAD_WAITING_PROC::param | 
if not NULL , passed as argument
Definition at line 105 of file n_thread_pool.h.
Referenced by add_threaded_process(), and refresh_thread_pool().
| #define DIRECT_PROC 4 | 
processing mode for added func, direct start, not queued
Definition at line 29 of file n_thread_pool.h.
| #define EXITED_THREAD 512 | 
indicate that the pool is off, all jobs have been consumed
Definition at line 43 of file n_thread_pool.h.
| #define EXITING_THREAD 256 | 
indicate that the pool is exiting, unfinished jobs will finish and the pool will exit the threads and enter the EXITED state
Definition at line 41 of file n_thread_pool.h.
| #define IDLE_PROC 16 | 
status of a thread which is waiting for some proc
Definition at line 33 of file n_thread_pool.h.
| #define NO_LOCK 1024 | 
if passed to add_threaded_process, skip main table lock in case we are in a func which is already locking it
Definition at line 45 of file n_thread_pool.h.
| #define NO_QUEUE 8 | 
special processing mode for waiting_list: do not add the work in queue since it' coming from the queue
Definition at line 31 of file n_thread_pool.h.
| #define NORMAL_PROC 1 | 
processing mode for added func, synced start, can be queued
Definition at line 25 of file n_thread_pool.h.
| #define RUNNING_PROC 64 | 
status of a thread which proc is currently running
Definition at line 37 of file n_thread_pool.h.
| #define RUNNING_THREAD 128 | 
indicate that the pool is running and ready to use
Definition at line 39 of file n_thread_pool.h.
| #define SYNCED_PROC 2 | 
processing mode for added func, synced start, not queued
Definition at line 27 of file n_thread_pool.h.
| #define WAITING_PROC 32 | 
status of a thread who have proc waiting to be processed 
 
Definition at line 35 of file n_thread_pool.h.
| int add_threaded_process | ( | THREAD_POOL * | thread_pool, | 
| void *(*)(void *param) | func_ptr, | ||
| void * | param, | ||
| int | mode | ||
| ) | 
add a function and params to a thread pool
| thread_pool | The target thread pool | 
| func_ptr | The function pointer to launch | 
| param | Eventual parameter struct to pass to the function | 
| mode | NORMAL_PROC: add to an available active thread or queue in the waiting list. SYNCED_PROC: add to an available thread and wait for a start call, no waiting list. DIRECT_PROC: add to an available thread, no waiting list. | 
Definition at line 180 of file n_thread_pool.c.
References DIRECT_PROC, THREAD_POOL_NODE::func, THREAD_WAITING_PROC::func, IDLE_PROC, list_push(), THREAD_POOL_NODE::lock, THREAD_POOL::lock, LOG_DEBUG, LOG_ERR, Malloc, mode, n_log, LIST::nb_items, THREAD_POOL::nb_max_waiting, NO_LOCK, NO_QUEUE, NORMAL_PROC, THREAD_POOL_NODE::param, THREAD_WAITING_PROC::param, RUNNING_THREAD, THREAD_POOL_NODE::state, SYNCED_PROC, THREAD_POOL_NODE::th_start, THREAD_POOL::thread_list, thread_pool, THREAD_POOL_NODE::thread_state, THREAD_POOL_NODE::type, THREAD_POOL::waiting_list, and WAITING_PROC.
Referenced by main(), main(), n_fluid_simulate_threaded(), n_vigenere_cypher(), and refresh_thread_pool().
 Here is the call graph for this function:
 Here is the caller graph for this function:| int destroy_threaded_pool | ( | THREAD_POOL ** | pool, | 
| unsigned int | delay | ||
| ) | 
delete a thread_pool, exit the threads and free the structs
| pool | The THREAD_POOL *object to kill | 
| delay | The THREAD_POOL *object to kill | 
Definition at line 370 of file n_thread_pool.c.
References __n_assert, DONE, EXITING_THREAD, Free, IDLE_PROC, list_destroy(), and u_sleep().
Referenced by main(), main(), and n_vigenere_cypher().
 Here is the call graph for this function:
 Here is the caller graph for this function:| long int get_nb_cpu_cores | ( | ) | 
get number of core of current system
Definition at line 26 of file n_thread_pool.c.
Referenced by main(), main(), and new_n_fluid().
 Here is the caller graph for this function:| THREAD_POOL * new_thread_pool | ( | size_t | nbmaxthr, | 
| size_t | nb_max_waiting | ||
| ) | 
Create a new pool of nbmaxthr threads.
| nbmaxthr | number of active threads in the pool | 
| nb_max_waiting | max number of waiting procs in the pool. Negative or zero value for no limit | 
Definition at line 110 of file n_thread_pool.c.
References Free, THREAD_POOL_NODE::func, IDLE_PROC, THREAD_POOL_NODE::lock, THREAD_POOL::lock, LOG_ERR, Malloc, MAX_LIST_ITEMS, THREAD_POOL::max_threads, n_log, THREAD_POOL::nb_actives, THREAD_POOL::nb_max_waiting, THREAD_POOL::nb_tasks, new_generic_list(), THREAD_POOL_NODE::param, RUNNING_THREAD, THREAD_POOL_NODE::state, THREAD_POOL_NODE::th_end, THREAD_POOL_NODE::th_start, THREAD_POOL_NODE::thr, THREAD_POOL::thread_list, thread_pool, THREAD_POOL_NODE::thread_pool, thread_pool_processing_function(), THREAD_POOL_NODE::thread_state, THREAD_POOL_NODE::type, and THREAD_POOL::waiting_list.
Referenced by main(), main(), and n_vigenere_cypher().
 Here is the call graph for this function:
 Here is the caller graph for this function:| int refresh_thread_pool | ( | THREAD_POOL * | thread_pool | ) | 
try to add some waiting DIRECT_PROCs on some free thread slots, else do nothing
| thread_pool | The thread pool to refresh | 
Definition at line 427 of file n_thread_pool.c.
References __n_assert, add_threaded_process(), Free, THREAD_WAITING_PROC::func, THREAD_POOL_NODE::lock, THREAD_POOL::lock, LOG_DEBUG, LOG_ERR, THREAD_POOL::max_threads, n_log, THREAD_POOL::nb_actives, THREAD_POOL::nb_tasks, LIST_NODE::next, NO_LOCK, NO_QUEUE, NORMAL_PROC, THREAD_WAITING_PROC::param, LIST_NODE::ptr, remove_list_node, RUNNING_PROC, LIST::start, THREAD_POOL_NODE::state, THREAD_POOL::thread_list, thread_pool, and THREAD_POOL::waiting_list.
Referenced by main(), n_fluid_simulate_threaded(), n_vigenere_cypher(), thread_pool_processing_function(), and wait_for_threaded_pool().
 Here is the call graph for this function:
 Here is the caller graph for this function:| int start_threaded_pool | ( | THREAD_POOL * | thread_pool | ) | 
Launch the process waiting for execution in the thread pool.
| thread_pool | The thread pool to launche | 
Definition at line 269 of file n_thread_pool.c.
References THREAD_POOL_NODE::lock, THREAD_POOL::lock, LOG_ERR, THREAD_POOL::max_threads, n_log, THREAD_POOL_NODE::state, SYNCED_PROC, THREAD_POOL_NODE::th_start, THREAD_POOL::thread_list, thread_pool, THREAD_POOL_NODE::type, and WAITING_PROC.
Referenced by n_fluid_simulate_threaded().
 Here is the caller graph for this function:| int wait_for_synced_threaded_pool | ( | THREAD_POOL * | thread_pool | ) | 
wait for all the launched process, blocking but light on the CPU as there is no polling
| thread_pool | The thread pool to wait | 
Definition at line 304 of file n_thread_pool.c.
References __n_assert, LOG_ERR, THREAD_POOL::max_threads, n_log, THREAD_POOL_NODE::th_end, THREAD_POOL::thread_list, and thread_pool.
Referenced by n_fluid_simulate_threaded().
 Here is the caller graph for this function:| int wait_for_threaded_pool | ( | THREAD_POOL * | thread_pool, | 
| unsigned int | delay | ||
| ) | 
Wait for all the launched process in the thread pool to terminate.
| thread_pool | The thread pool to wait | 
| delay | time between each check | 
Definition at line 325 of file n_thread_pool.c.
References DONE, IDLE_PROC, THREAD_POOL_NODE::lock, THREAD_POOL::max_threads, LIST::nb_items, refresh_thread_pool(), THREAD_POOL_NODE::state, THREAD_POOL::thread_list, thread_pool, u_sleep(), and THREAD_POOL::waiting_list.
Referenced by main(), main(), and n_vigenere_cypher().
 Here is the call graph for this function:
 Here is the caller graph for this function: