Add concurrent execution helper to Worker
Concurrently executing a task on all workers *and* waiting until all workers have executed the task seems to be common enough to warrant a helper function for that purpose.
This commit is contained in:
@ -338,6 +338,16 @@ public:
|
||||
*/
|
||||
static size_t execute_on_all_serially(Task* pTask);
|
||||
|
||||
/**
|
||||
* Executes a task on all workers concurrently and waits until
|
||||
* all workers are done.
|
||||
*
|
||||
* @param pTask The task to be executed.
|
||||
*
|
||||
* @return How many workers the task was posted to.
|
||||
*/
|
||||
static size_t execute_on_all_concurrently(Task* pTask);
|
||||
|
||||
/**
|
||||
* Post a message to a worker.
|
||||
*
|
||||
|
@ -618,6 +618,7 @@ size_t Worker::execute_on_all(std::auto_ptr<DisposableTask> sTask)
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
//static
|
||||
size_t Worker::execute_on_all_serially(Task* pTask)
|
||||
{
|
||||
@ -638,6 +639,13 @@ size_t Worker::execute_on_all_serially(Task* pTask)
|
||||
return n;
|
||||
}
|
||||
|
||||
//static
|
||||
size_t Worker::execute_on_all_concurrently(Task* pTask)
|
||||
{
|
||||
Semaphore sem;
|
||||
return sem.wait_n(Worker::execute_on_all(pTask, &sem));
|
||||
}
|
||||
|
||||
bool Worker::post_message(uint32_t msg_id, intptr_t arg1, intptr_t arg2)
|
||||
{
|
||||
// NOTE: No logging here, this function must be signal safe.
|
||||
|
Reference in New Issue
Block a user