sig
type t
val create : int -> CCSemaphore.t
val get : CCSemaphore.t -> int
val acquire : int -> CCSemaphore.t -> unit
val release : int -> CCSemaphore.t -> unit
val with_acquire : n:int -> CCSemaphore.t -> f:(unit -> 'a) -> 'a
val wait_until_at_least : n:int -> CCSemaphore.t -> f:(unit -> 'a) -> 'a
end