functor (M : BaseLock->   sig     type t = M.t     val create : unit -> t     val lock : t -> unit     val unlock : t -> unit     val try_lock : t -> bool     val synchronize : ?lock:t -> ('-> 'b) -> '-> 'b     val make : unit -> lock   end