sig
  type 'a t
  val create : '-> 'CCLock.t
  val with_lock : 'CCLock.t -> ('-> 'b) -> 'b
  val try_with_lock : 'CCLock.t -> ('-> 'b) -> 'b option
  module LockRef :
    sig
      type 'a t
      val get : 'CCLock.LockRef.t -> 'a
      val set : 'CCLock.LockRef.t -> '-> unit
      val update : 'CCLock.LockRef.t -> ('-> 'a) -> unit
    end
  val with_lock_as_ref : 'CCLock.t -> f:('CCLock.LockRef.t -> 'b) -> 'b
  val update : 'CCLock.t -> ('-> 'a) -> unit
  val update_map : 'CCLock.t -> ('-> 'a * 'b) -> 'b
  val mutex : 'CCLock.t -> Mutex.t
  val get : 'CCLock.t -> 'a
  val set : 'CCLock.t -> '-> unit
  val incr : int CCLock.t -> unit
  val decr : int CCLock.t -> unit
  val incr_then_get : int CCLock.t -> int
  val get_then_incr : int CCLock.t -> int
  val decr_then_get : int CCLock.t -> int
  val get_then_decr : int CCLock.t -> int
  val get_then_set : bool CCLock.t -> bool
  val get_then_clear : bool CCLock.t -> bool
end