Home | Libraries | People | FAQ | More |
boost::barrier —
An object of class barrier is a synchronization primitive used to cause a set of threads to wait until they each perform a certain function or each reach a particular point in their execution.
class barrier : private boost::noncopyable // Exposition only { public: // construct/copy/destruct barrier(size_t); ~barrier(); // waiting bool wait(); };
When a barrier is created, it is initialized with a thread count N.
The first N-1 calls to wait()
will all cause their threads to be blocked.
The Nth call to wait()
will allow all of the waiting threads, including
the Nth thread, to be placed in a ready state. The Nth call will also "reset"
the barrier such that, if an additional N+1th call is made to wait()
,
it will be as though this were the first call to wait()
; in other
words, the N+1th to 2N-1th calls to wait()
will cause their
threads to be blocked, and the 2Nth call to wait()
will allow all of
the waiting threads, including the 2Nth thread, to be placed in a ready state
and reset the barrier. This functionality allows the same set of N threads to re-use
a barrier object to synchronize their execution at multiple points during their
execution.
See Glossary for definitions of thread states blocked and ready. Note that "waiting" is a synonym for blocked.
barrier
construct/copy/destructbarrier(size_t count);
Effects:
Constructs a barrier object that
will cause count
threads to block on a call to wait()
.
~barrier();
Effects:
Destroys *this
. If threads are still executing
their wait()
operations, the behavior for these threads is undefined.
barrier
waitingbool wait();
Effects:
Wait until N threads call wait()
, where
N equals the count
provided to the constructor for the
barrier object.
Note that if the barrier is
destroyed before wait()
can return, the behavior is
undefined.
true
, the others will receive a value of false
.
Precisely which thread receives the return value of true
will
be implementation-defined. Applications can use this value to designate one
thread as a leader that will take a certain action, and the other threads
emerging from the barrier can wait for that action to take place.
Copyright © 2001-2003 William E. Kempf |