sig
  type t = Nano_mutex.t
  val invariant : t -> unit
  val create : unit -> t
  val equal : t -> t -> bool
  val current_thread_has_lock : t -> bool
  val lock : t -> unit Core_kernel.Std.Or_error.t
  val lock_exn : t -> unit
  val try_lock :
    t -> [ `Acquired | `Not_acquired ] Core_kernel.Std.Or_error.t
  val try_lock_exn : t -> [ `Acquired | `Not_acquired ]
  val unlock : t -> unit Core_kernel.Std.Or_error.t
  val unlock_exn : t -> unit
  val critical_section : t -> f:(unit -> 'a) -> 'a
  val sexp_of_t : t -> Sexplib.Sexp.t
end