A counter that lets a thread block until a number of actions complete.
Synopsis
Declared in <absl/synchronization/blocking_counter.h>
class BlockingCounter;
Description
This class allows a thread to block for a pre‐specified number of actions. BlockingCounter maintains a single non‐negative abstract integer "count" with an initial value initial_count. A thread can then call Wait() on this blocking counter to block until the specified number of events occur; worker threads then call DecrementCount() on the counter upon completion of their work. Once the counter's internal "count" reaches zero, the blocked thread unblocks.
A BlockingCounter requires the following:
-
its
initial_countis non‐negative. -
the number of calls to
DecrementCount()on it is at mostinitial_count. -
Wait()is called at most once on it.
Given the above requirements, a BlockingCounter provides the following guarantees:
-
Once its internal "count" reaches zero, no legal action on the object can further change the value of "count".
-
When
Wait()returns, it is legal to destroy theBlockingCounter. -
When
Wait()returns, the number of calls toDecrementCount()on this blocking counter exactly equalsinitial_count.
Example:
BlockingCounter bcount(N); // there are N items of work
... Allow worker threads to start.
... On completing each work item, workers do:
... bcount.DecrementCount(); // an item of work has been completed
bcount.Wait(); // wait for all work to be complete
Member Functions
Name |
Description |
|
Constructors |
|
Deleted copy assignment; |
Decrements the counter by one. |
|
Blocks until the counter reaches zero. |
Created with MrDocs