sig
  type t
  exception Error of int * string
  val unnamed_create : int -> Semaphore.t
  val unnamed_destroy : Semaphore.t -> unit
  val named_open : int -> string -> Semaphore.t
  val named_close : Semaphore.t -> unit
  val named_unlink : string -> unit
  type achievement = Decremented | Failed
  val wait : Semaphore.t -> unit
  val try_wait : Semaphore.t -> Semaphore.achievement
  val signal : Semaphore.t -> unit
  val do_with_unnamed : int -> (Semaphore.t -> 'a) -> 'a
end