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