module Mutex:sig
..end
typet =
Mutex.t
val create : unit -> t
val lock : t -> unit
Note attempting to lock a mutex you already have locked from
the same thread will also suspend your thread, possibly forever.
If this is not what you want, take a look at module RMutex
.
val try_lock : t -> bool
BatMutex.Mutex.lock
, but does not suspend the calling thread if
the mutex is already locked: just return false
immediately
in that case. If the mutex is unlocked, lock it and
return true
.val unlock : t -> unit
val synchronize : ?lock:t -> ('a -> 'b) -> 'a -> 'b
synchronize f
returns a new function f'
with the same behavior
as f
but such that concurrenty 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