package batteries
Install
dune-project
Dependency
Authors
Maintainers
Sources
md5=ea26b5c72e6731e59d856626049cca4d
sha512=55975b62c26f6db77433a3ac31f97af609fc6789bb62ac38b267249c78fd44ff37fe81901f1cf560857b9493a6046dd37b0d1c0234c66bd59e52843aac3ce6cb
doc/batteries/BatRMutex/index.html
Module BatRMutex
Source
Reentrant Mutexes
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 D
):
RMutex.synchronize ~lock:m (fun () ->
(* Critical section that operates over D *);
) ()
This module implements reentrant mutexes, i.e. a version of mutexes which may be locked again by their owner thread without blocking this thread. Reentrant mutexes are typically slower than regular mutexes but also safer.
@documents RMutex
The type of mutexes.
Lock the given mutex. Only one thread can have the mutex locked at any time. A thread that attempts to lock a mutex already locked will suspend until the other mutex is unlocked.
Note attempting to lock a mutex you already have locked from the same thread will not suspend your thread.
Same as RMutex.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
.
Unlock the given mutex. Other threads suspended trying to lock the mutex will restart. If the mutex wasn't locked, nothing happens.
Protect a function.
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.
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.
Create a new abstract lock based on Reentrant Mutexes.