package async_extended

  1. Overview
  2. Docs

The standard semaphore concept, with an async API.

type t
include sig ... end
val sexp_of_t : t -> Ppx_sexp_conv_lib.Sexp.t
include Async.Invariant.S with type t := t
val invariant : t -> unit
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.t) Resource.t

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