![]() |
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: