sig
  type t = Mutex.t
  val create : unit -> t
  val equal : t -> t -> bool
  val lock : t -> unit
  val try_lock : t -> bool
  val timedlock : (t -> Time.t -> bool) Or_error.t
  val unlock : t -> unit
  val am_holding_mutex : t -> bool
  val critical_section : t -> f:(unit -> 'a) -> 'a
  val synchronize : ('-> 'b) -> '-> 'b
  val update_signal : t -> Condition.t -> f:(unit -> 'a) -> 'a
  val update_broadcast : t -> Condition.t -> f:(unit -> 'a) -> 'a
  val ounit_tests : unit -> OUnit.test
end