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