# Module BatteriesThread.Mutex

    module Mutex: BatMutex

    val synchronize : ?lock:Mutex.t -> ('a -> 'b) -> 'a -> 'b

Protect a function.

`synchronize f` returns a new function `f'` with the same behavior as `f` but such that concurrent calls to `f'` are queued if necessary to avoid races.

`synchronize ~lock:l f` behaves as `synchronize f` but uses a user-specified lock `l`, which may be useful to share a lock between several function. This is necessary in particular when the lock is specific to a data structure rather than to a function.

In either case, the lock is acquired when entering the function and released when the function call ends, whether this is due to normal termination or to some exception being raised.

    val make : unit -> BatConcurrent.lock

Create a new abstract lock based on Mutexes.