#include <Barrier.h>
Inheritance diagram for ACE_Barrier:
Public Member Functions | |
ACE_Barrier (unsigned int count, const ACE_TCHAR *name=0, void *arg=0) | |
Initialize the barrier to synchronize count threads. | |
~ACE_Barrier (void) | |
Default dtor. | |
int | wait (void) |
void | dump (void) const |
Dump the state of an object. | |
Public Attributes | |
ACE_ALLOC_HOOK_DECLARE | |
Declare the dynamic allocation hooks. | |
Protected Attributes | |
ACE_Thread_Mutex | lock_ |
Serialize access to the barrier state. | |
int | current_generation_ |
int | count_ |
Total number of threads that can be waiting at any one time. | |
ACE_Sub_Barrier | sub_barrier_1_ |
ACE_Sub_Barrier | sub_barrier_2_ |
ACE_Sub_Barrier * | sub_barrier_ [2] |
Private Member Functions | |
void | operator= (const ACE_Barrier &) |
ACE_Barrier (const ACE_Barrier &) |
This class allows <count> number of threads to synchronize their completion of (one round of) a task, which is known as "barrier synchronization". After all the threads call <wait()> on the barrier they are all atomically released and can begin a new round.
This implementation uses a "sub-barrier generation numbering" scheme to avoid overhead and to ensure that all threads wait to leave the barrier correct. This code is based on an article from SunOpsis Vol. 4, No. 1 by Richard Marejka (Richard.Marejka@canada.sun.com).
|
Initialize the barrier to synchronize count threads.
|
|
Default dtor.
|
|
|
|
Dump the state of an object.
Reimplemented in ACE_Thread_Barrier. |
|
|
|
Block the caller until all |
|
Declare the dynamic allocation hooks.
Reimplemented in ACE_Thread_Barrier. |
|
Total number of threads that can be waiting at any one time.
|
|
Either 0 or 1, depending on whether we are the first generation of waiters or the next generation of waiters. |
|
Serialize access to the barrier state.
|
|
|
|
We keep two |
|
|