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 -> ('a -> 'b) -> 'a -> 'b     val make : unit -> lock   end