sig
  type t = int * OUnitShared.scope
  val create : '-> int * 'a
  val lock : OUnitShared.shared -> int * OUnitShared.scope -> unit
  val try_lock : OUnitShared.shared -> int * OUnitShared.scope -> bool
  val unlock : OUnitShared.shared -> int * OUnitShared.scope -> unit
  val with_lock :
    OUnitShared.shared -> int * OUnitShared.scope -> (unit -> 'a) -> 'a
end