sig
  type 'a t
  val init : 'a option -> 'Semaphore.t
  val signal : 'Semaphore.t -> '-> unit
  val wait : 'Semaphore.t -> 'a
  val get : 'Semaphore.t -> 'a option
  val look : 'Semaphore.t -> 'a option
  val ounit_tests : unit -> OUnit.test
end