sig
  type ('a, 'b) reagent = ('a, 'b) R.t
  type lock = Lock.t
  type t
  val create : unit -> t
  val wait : lock -> t -> bool
  val signal : t -> unit
  val broadcast : t -> unit
end