sig
  type t = Mutex.t
  val create : unit -> Core_mutex.t
  val equal : Core_mutex.t -> Core_mutex.t -> bool
  val lock : Core_mutex.t -> unit
  val try_lock : Core_mutex.t -> [ `Acquired | `Already_held_by_me_or_other ]
  val timedlock : (Core_mutex.t -> Time.t -> bool) Core_kernel.Std.Or_error.t
  val unlock : Core_mutex.t -> unit
  val critical_section : Core_mutex.t -> f:(unit -> 'a) -> 'a
  val synchronize : ('-> 'b) -> '-> 'b
  val update_signal : Core_mutex.t -> Condition.t -> f:(unit -> 'a) -> 'a
  val update_broadcast : Core_mutex.t -> Condition.t -> f:(unit -> 'a) -> 'a
end