|
Aleph-w 3.0
A C++ Library for Data Structures and Algorithms
|
Thread pool for parallel worker function execution. More...
#include <worker_pool.H>
Public Member Functions | |
| WorkersSet (WorkerFct worker_fct, const size_t qsize, const size_t n=16) | |
| Construct worker pool with specified thread count. | |
| void | shutdown () |
| Signal all workers to shut down. | |
| ~WorkersSet () | |
| Destructor shuts down and joins all worker threads. | |
| void | prepare_num_workers (size_t n) |
| Set the expected number of work items. | |
| void | schedule_call (void *pars_ptr) |
| Schedule a work item for execution. | |
| bool | is_jobs_done () const |
| Check if a worker has signaled job completion. | |
| void | wait_until_all_workers_finished_or_job_is_done () |
| Block until all work items processed or job done signaled. | |
Private Member Functions | |
| void | worker_handler () |
Private Attributes | |
| WorkerFct | worker_fct = nullptr |
| size_t | num_threads = 0 |
| std::mutex | m |
| std::condition_variable | cond |
| std::atomic< size_t > | num_workers = 0 |
| FixedQueue< void * > | q |
| DynList< std::thread > | threads |
| bool | shut_down = false |
| bool | job_done = false |
| std::condition_variable | job_done_cond |
| std::mutex | job_done_mutex |
Thread pool for parallel worker function execution.
Manages a pool of worker threads that execute a user-provided function. Work items are scheduled via a queue and distributed to available workers.
| WorkerFct | Function pointer type: bool (*)(void*) |
The worker function receives a void* to parameters and returns bool:
false: Continue processing more itemstrue: Signal "job done", stop all workersvoid* pointers and frees them.Definition at line 107 of file worker_pool.H.
|
inline |
Construct worker pool with specified thread count.
| worker_fct | Function to execute for each work item |
| qsize | Maximum number of queued work items |
| n | Number of worker threads (default 16) |
Definition at line 183 of file worker_pool.H.
References Aleph::DynList< T >::append(), WorkersSet< WorkerFct >::threads, and WorkersSet< WorkerFct >::worker_handler().
|
inline |
Destructor shuts down and joins all worker threads.
Definition at line 204 of file worker_pool.H.
References Aleph::maps(), FunctionalMethods< Container, T >::mutable_for_each(), WorkersSet< WorkerFct >::shutdown(), and WorkersSet< WorkerFct >::threads.
|
inline |
Check if a worker has signaled job completion.
Definition at line 243 of file worker_pool.H.
References WorkersSet< WorkerFct >::job_done, and WorkersSet< WorkerFct >::m.
Set the expected number of work items.
| n | Number of work items to expect |
Definition at line 215 of file worker_pool.H.
References WorkersSet< WorkerFct >::m, and WorkersSet< WorkerFct >::num_workers.
Schedule a work item for execution.
The work item is added to the queue and will be picked up by an available worker thread.
| pars_ptr | Pointer to parameters (freed after worker returns) |
Definition at line 231 of file worker_pool.H.
References WorkersSet< WorkerFct >::cond, WorkersSet< WorkerFct >::m, Aleph::maps(), Aleph::FixedQueue< T >::put(), and WorkersSet< WorkerFct >::q.
|
inline |
Signal all workers to shut down.
Workers will complete their current task and exit.
Definition at line 196 of file worker_pool.H.
References WorkersSet< WorkerFct >::cond, WorkersSet< WorkerFct >::m, and WorkersSet< WorkerFct >::shut_down.
Referenced by WorkersSet< WorkerFct >::~WorkersSet().
|
inline |
Block until all work items processed or job done signaled.
Returns when either:
Definition at line 256 of file worker_pool.H.
References WorkersSet< WorkerFct >::job_done_cond, and WorkersSet< WorkerFct >::job_done_mutex.
|
inlineprivate |
Definition at line 126 of file worker_pool.H.
References WorkersSet< WorkerFct >::cond, Aleph::FixedQueue< T >::get(), Aleph::FixedQueue< T >::is_empty(), WorkersSet< WorkerFct >::job_done, WorkersSet< WorkerFct >::job_done_cond, WorkersSet< WorkerFct >::m, Aleph::maps(), WorkersSet< WorkerFct >::num_workers, WorkersSet< WorkerFct >::q, and WorkersSet< WorkerFct >::shut_down.
Referenced by WorkersSet< WorkerFct >::WorkersSet().
|
private |
Definition at line 114 of file worker_pool.H.
Referenced by WorkersSet< WorkerFct >::schedule_call(), WorkersSet< WorkerFct >::shutdown(), and WorkersSet< WorkerFct >::worker_handler().
Definition at line 121 of file worker_pool.H.
Referenced by WorkersSet< WorkerFct >::is_jobs_done(), and WorkersSet< WorkerFct >::worker_handler().
|
private |
Definition at line 123 of file worker_pool.H.
Referenced by WorkersSet< WorkerFct >::wait_until_all_workers_finished_or_job_is_done(), and WorkersSet< WorkerFct >::worker_handler().
|
private |
Definition at line 124 of file worker_pool.H.
Referenced by WorkersSet< WorkerFct >::wait_until_all_workers_finished_or_job_is_done().
|
private |
Definition at line 113 of file worker_pool.H.
Referenced by WorkersSet< WorkerFct >::is_jobs_done(), WorkersSet< WorkerFct >::prepare_num_workers(), WorkersSet< WorkerFct >::schedule_call(), WorkersSet< WorkerFct >::shutdown(), and WorkersSet< WorkerFct >::worker_handler().
|
private |
Definition at line 112 of file worker_pool.H.
|
private |
Definition at line 116 of file worker_pool.H.
Referenced by WorkersSet< WorkerFct >::prepare_num_workers(), and WorkersSet< WorkerFct >::worker_handler().
|
private |
Definition at line 118 of file worker_pool.H.
Referenced by WorkersSet< WorkerFct >::schedule_call(), and WorkersSet< WorkerFct >::worker_handler().
Definition at line 120 of file worker_pool.H.
Referenced by WorkersSet< WorkerFct >::shutdown(), and WorkersSet< WorkerFct >::worker_handler().
|
private |
Definition at line 119 of file worker_pool.H.
Referenced by WorkersSet< WorkerFct >::WorkersSet(), and WorkersSet< WorkerFct >::~WorkersSet().
Definition at line 111 of file worker_pool.H.