sig
  type t
  val create : unit -> Mutex.t
  val lock : Mutex.t -> unit
  val try_lock : Mutex.t -> bool
  val unlock : Mutex.t -> unit
  val protect : Mutex.t -> (unit -> 'a) -> 'a
end