sig
  type 'pref t
  type pref = [ `NoPref | `Readers | `Writers ]
  type 'pref kind
  val r_pref : [ `Readers ] Rw_mutex.kind
  val w_pref : [ `Writers ] Rw_mutex.kind
  val np_pref : [ `NoPref ] Rw_mutex.kind
  val create : 'pref Rw_mutex.kind -> 'pref Rw_mutex.t
  val r_lock : [< Rw_mutex.pref ] Rw_mutex.t -> unit
  val r_unlock : [< Rw_mutex.pref ] Rw_mutex.t -> unit
  val w_lock : [< Rw_mutex.pref ] Rw_mutex.t -> unit
  val w_unlock : [< Rw_mutex.pref ] Rw_mutex.t -> unit
  val try_r_lock : [< Rw_mutex.pref ] Rw_mutex.t -> bool
  val try_w_lock : [< Rw_mutex.pref ] Rw_mutex.t -> bool
  val wrap_r_lock : [< Rw_mutex.pref ] Rw_mutex.t -> (unit -> 'a) -> 'a
  val try_wrap_r_lock :
    [< Rw_mutex.pref ] Rw_mutex.t -> (unit -> 'a) -> 'a option
  val btry_wrap_r_lock :
    [< Rw_mutex.pref ] Rw_mutex.t -> (unit -> unit) -> bool
  val wrap_w_lock : [< Rw_mutex.pref ] Rw_mutex.t -> (unit -> 'a) -> 'a
  val try_wrap_w_lock :
    [< Rw_mutex.pref ] Rw_mutex.t -> (unit -> 'a) -> 'a option
  val btry_wrap_w_lock :
    [< Rw_mutex.pref ] Rw_mutex.t -> (unit -> unit) -> bool
  val ounit_tests : unit -> OUnit.test
end