Up

module Semaphore

: sig

The standard semaphore concept, with an async API.

#
type t
include Core.Std.Invariant.S with type t := 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.Std.Deferred.t

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

#
val resource : t -> (unit, Core.Std.Nothing.t) Resource.t

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

#
val sexp_of_t : t -> Sexplib.Sexp.t
end