CCSemaphore
val create : int -> t
create n
creates a semaphore with initial value n
.
val get : t -> int
Current value.
val acquire : int -> t -> unit
acquire n s
blocks until get s >= n
, then atomically sets s := !s - n
.
val release : int -> t -> unit
release n s
atomically sets s := !s + n
.
val with_acquire : n:int -> t -> f:( unit -> 'a ) -> 'a
with_acquire ~n s ~f
first acquires s
with n
units, calls f ()
, and then releases s
with n
units. Safely release the semaphore even if f ()
fails.
val wait_until_at_least : n:int -> t -> f:( unit -> 'a ) -> 'a
wait_until_at_least ~n s ~f
waits until get s >= n
, then calls f ()
and returns its result. Doesn't modify the semaphore.