Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using a local clone.

core.sync.barrier

The barrier module provides a primitive for synchronizing the progress of a group of threads.
Authors:
Sean Kelly
class Barrier;
This class represents a barrier across which threads may only travel in groups of a specific size.
Examples:
int  numThreads = 10;
auto barrier    = new Barrier( numThreads );
auto synInfo    = new Object;
int  numReady   = 0;
int  numPassed  = 0;

void threadFn()
{
    synchronized( synInfo )
    {
        ++numReady;
    }
    barrier.wait();
    synchronized( synInfo )
    {
        ++numPassed;
    }
}

auto group = new ThreadGroup;

for( int i = 0; i < numThreads; ++i )
{
    group.create( &threadFn );
}
group.joinAll();
assert( numReady == numThreads && numPassed == numThreads );
this(uint limit);
Initializes a barrier object which releases threads in groups of limit in size.
Parameters:
uint limit The number of waiting threads to release in unison.
Throws:
SyncError on error.
void wait();
Wait for the pre-determined number of threads and then proceed.
Throws:
SyncError on error.