wpool.h3
Usage
Typedefs
typedef void
cc_wpool_f
(void
*)
Functions
cc_wpool *
cc_wpool_construct
(int
numworkers)
void cc_wpool_destruct
(cc_wpool
*pool)
int cc_wpool_get_num_workers
(cc_wpool
*pool)
void cc_wpool_set_num_workers
(cc_wpool
*pool,
int
newnum)
void cc_wpool_wait_all
(cc_wpool
*pool)
SbBool cc_wpool_try_begin
(cc_wpool
*pool,
int
numworkersneeded)
void cc_wpool_begin
(cc_wpool
*pool,
int
numworkersneeded)
void cc_wpool_start_worker
(cc_wpool
*pool,
cc_wpool_f
*workfunc,
void
*closure)
void cc_wpool_end
(cc_wpool
*pool)
Function Documentation
cc_wpool* cc_wpool_construct (intnumworkers)
Construct worker pool.
void cc_wpool_destruct (cc_wpool *pool)
Destruct worker pool. Will wait for all jobs in progress to finish
int cc_wpool_get_num_workers (cc_wpool *pool)
Returns the number of workers in the pool.
void cc_wpool_set_num_workers (cc_wpool *pool, intnewnum)
Sets the number of workers in the pool.
void cc_wpool_wait_all (cc_wpool *pool)
Wait for all pool workers to finish working and go into idle state. This method should only be called by the thread controlling the pool. A pool worker should not call this method, since it will obviously never return from here (it will never go idle).
SbBool cc_wpool_try_begin (cc_wpool *pool, intnumworkersneeded)
Locks the pool so that workers can be started using the cc_wpool_start_worker() method. numworkersneeded should contain the minumum number of workers that is needed. If workers are available, the pool will be locked and TRUE is returned. Otherwise FALSE is returned.
Usage pseudocode:
int numworkers = 5;
if (cc_wpool_begin(pool, numworkers)) {
for (int i = 0; i < numworkers; i++) {
cc_wpool_start_worker(my_work[i], my_closure[i]);
}
cc_wpool_end(pool);
}
Important! If too few workers are available, the pool will not be locked and cc_wpool_end() should not be called.
See also:
cc_wpool_start_worker(), cc_wpool_end()
void cc_wpool_begin (cc_wpool *pool, intnumworkersneeded)
Wait for numworkersneeded workers to become idle. When returning from this call, the pool will be locked, and up to numworkersneeded can be started using the cc_wpool_start_worker() method. Remember to call cc_wpool_end() to unlock the pool again.
See also:
cc_wpool_try_begin()
void cc_wpool_start_worker (cc_wpool *pool, cc_wpool_f *workfunc, void *closure)
Starts a worker. The pool must be locked (using cc_wpool_begin()) before calling this method.
See also:
cc_wpool_begin() , cc_wpool_end()
void cc_wpool_end (cc_wpool *pool)
Unlocks the pool after a cc_wpool_begin(), cc_wpool_start_worker() sequence.
Please note that if cc_wpool_begin() returns 0, you should not call cc_wpool_end().
See also:
cc_wpool_begin(), cc_wpool_start_worker()