class Concurrent::Semaphore

@!macro [attach] semaphore

A counting semaphore. Conceptually, a semaphore maintains a set of
permits. Each {#acquire} blocks if necessary until a permit is
available, and then takes it. Each {#release} adds a permit, potentially
releasing a blocking acquirer.
However, no actual permit objects are used; the Semaphore just keeps a
count of the number available and acts accordingly.

@!macro semaphore_public_api