Mutexes (mutual-exclusion locks) are used to implement critical sections
and protect shared mutable data structures against concurrent accesses.
The typical use is (if
m is the mutex associated with the data structure
Mutex.synchronize ~lock:m (fun () -> (* Critical section that operates over D *); ) ()
This module implements
Author(s): Xavier Leroy (Base module), Damien Doligez (Base module), David Teller
val synchronize :
?lock:Mutex.t -> ('a -> 'b) -> 'a -> 'b
synchronize f returns a new function
f' with the same behavior
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
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
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