Module Async_extended.Semaphore

The standard semaphore concept, with an async API.

type t
include sig ... end
val sexp_of_t : t ‑> Base.Sexp.t
include Async.Invariant.S with type t := t
type t
val create : int ‑> t

Create a simple counting semaphore, create initial_value is the inital value of the semaphore. Callers to decr will wait until the value is positive.

val value : t ‑> int

Get the current value of the semaphore

val incr : t ‑> unit

Increment the semaphore and if there are jobs sleeping on decr wakeup one of them.

val decr : t ‑> unit Async.Deferred.t

Decrement the sempahore. This blocks if resulting the semaphore value is negative.

val resource : t ‑> (unit, Core.Nothing.tResource.t

Interface to semaphore where the users can only return the tokens they took from semaphore, not add more tokens