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_count is non‐negative.

  • the number of calls to DecrementCount() on it is at most initial_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 the BlockingCounter.

  • When Wait() returns, the number of calls to DecrementCount() on this blocking counter exactly equals initial_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

BlockingCounter [constructor]

Constructors

operator= [deleted]

Deleted copy assignment; BlockingCounter is not copyable.

DecrementCount

Decrements the counter by one.

Wait

Blocks until the counter reaches zero.

Created with MrDocs