![]() |
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(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.
bool 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.
Copyright © 2001-2003 William E. Kempf |