Aleph-w 3.0
A C++ Library for Data Structures and Algorithms
Loading...
Searching...
No Matches
WorkersSet< WorkerFct > Class Template Reference

Thread pool for parallel worker function execution. More...

#include <worker_pool.H>

Collaboration diagram for WorkersSet< WorkerFct >:
[legend]

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_tnum_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
 

Detailed Description

template<class WorkerFct>
class WorkersSet< WorkerFct >

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.

Template Parameters
WorkerFctFunction pointer type: bool (*)(void*)

Worker Function Contract

The worker function receives a void* to parameters and returns bool:

  • Return false: Continue processing more items
  • Return true: Signal "job done", stop all workers
Note
The pool takes ownership of scheduled void* pointers and frees them.
Author
Leandro Rabindranath León

Definition at line 107 of file worker_pool.H.

Constructor & Destructor Documentation

◆ WorkersSet()

template<class WorkerFct >
WorkersSet< WorkerFct >::WorkersSet ( WorkerFct  worker_fct,
const size_t  qsize,
const size_t  n = 16 
)
inline

Construct worker pool with specified thread count.

Parameters
worker_fctFunction to execute for each work item
qsizeMaximum number of queued work items
nNumber 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().

◆ ~WorkersSet()

template<class WorkerFct >
WorkersSet< WorkerFct >::~WorkersSet ( )
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.

Member Function Documentation

◆ is_jobs_done()

template<class WorkerFct >
bool WorkersSet< WorkerFct >::is_jobs_done ( ) const
inline

Check if a worker has signaled job completion.

Returns
true if worker returned true (job done)

Definition at line 243 of file worker_pool.H.

References WorkersSet< WorkerFct >::job_done, and WorkersSet< WorkerFct >::m.

◆ prepare_num_workers()

template<class WorkerFct >
void WorkersSet< WorkerFct >::prepare_num_workers ( size_t  n)
inline

Set the expected number of work items.

Parameters
nNumber of work items to expect

Definition at line 215 of file worker_pool.H.

References WorkersSet< WorkerFct >::m, and WorkersSet< WorkerFct >::num_workers.

◆ schedule_call()

template<class WorkerFct >
void WorkersSet< WorkerFct >::schedule_call ( void pars_ptr)
inline

Schedule a work item for execution.

The work item is added to the queue and will be picked up by an available worker thread.

Parameters
pars_ptrPointer to parameters (freed after worker returns)
Note
Caller allocates pars_ptr; pool takes ownership and frees it.

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.

◆ shutdown()

template<class WorkerFct >
void WorkersSet< WorkerFct >::shutdown ( )
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().

◆ wait_until_all_workers_finished_or_job_is_done()

template<class WorkerFct >
void WorkersSet< WorkerFct >::wait_until_all_workers_finished_or_job_is_done ( )
inline

Block until all work items processed or job done signaled.

Returns when either:

  • All scheduled work items have been processed, or
  • A worker function returned true (job done)

Definition at line 256 of file worker_pool.H.

References WorkersSet< WorkerFct >::job_done_cond, and WorkersSet< WorkerFct >::job_done_mutex.

◆ worker_handler()

Member Data Documentation

◆ cond

template<class WorkerFct >
std::condition_variable WorkersSet< WorkerFct >::cond
private

◆ job_done

template<class WorkerFct >
bool WorkersSet< WorkerFct >::job_done = false
private

◆ job_done_cond

template<class WorkerFct >
std::condition_variable WorkersSet< WorkerFct >::job_done_cond
private

◆ job_done_mutex

template<class WorkerFct >
std::mutex WorkersSet< WorkerFct >::job_done_mutex
private

◆ m

◆ num_threads

template<class WorkerFct >
size_t WorkersSet< WorkerFct >::num_threads = 0
private

Definition at line 112 of file worker_pool.H.

◆ num_workers

template<class WorkerFct >
std::atomic<size_t> WorkersSet< WorkerFct >::num_workers = 0
private

◆ q

◆ shut_down

template<class WorkerFct >
bool WorkersSet< WorkerFct >::shut_down = false
private

◆ threads

template<class WorkerFct >
DynList<std::thread> WorkersSet< WorkerFct >::threads
private

◆ worker_fct

template<class WorkerFct >
WorkerFct WorkersSet< WorkerFct >::worker_fct = nullptr
private

Definition at line 111 of file worker_pool.H.


The documentation for this class was generated from the following file: