Mutex(3)
hii bestie π welcome to Mutex(3), straight outta the OCaml library manual. We're talking locks for mutual exclusion, and yes she's iconic. π
β¨ NAME β¨
Mutex β Locks for mutual exclusion.
π§© Module π§©
Module Mutex
π Documentation π
Module Mutex
: sig end
okay so 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 β literally this:
Mutex.lock m;
(* Critical section that operates over D *);
Mutex.unlock m
π the actual API, bestie
type tβ The type of mutexes.val create : unit -> tβ Return a new mutex. Fresh mutex just dropped β¨val lock : t -> unitβ 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 by another thread will suspend until the other thread unlocks the mutex.
Before4.12: Sys_error was not raised for recursive locking (platform-dependent behaviour).
Raises Sys_error if the mutex is already locked by the thread calling Mutex.lock.
val try_lock : t -> boolβ Same asMutex.lock, but does not suspend the calling thread if the mutex is already locked: just returnfalseimmediately in that case. If the mutex is unlocked, lock it and returntrue. No waiting, no drama πval unlock : t -> unitβ Unlock the given mutex. Other threads suspended trying to lock the mutex will restart. The mutex must have been previously locked by the thread that callsMutex.unlock.
Before4.12: Sys_error was not raised when unlocking an unlocked mutex or when unlocking a mutex from a different thread.
Raises Sys_error if the mutex is unlocked or was locked by another thread.
val protect : t -> (unit -> 'a) -> 'aβprotect mutex frunsf()in a critical section wheremutexis locked (usingMutex.lock); it then takes care of releasingmutex, whetherf()returned a value or raised an exception.
The unlocking operation is guaranteed to always take place, even in the event an asynchronous exception (e.g. Sys.Break) is raised in some signal handler. That's the safety net, bestie π«Ά
Since 5.1
big kiss and a sparkle π this was OCamldoc, dated 2026-06-22, for Mutex(3) β periodt. π
π¦ where this page comes from
- arch rolling: ocaml 5.5.0-1 Β· LGPL2.1 AND custom: QPL-1.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms