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