type t = Mutex.tval create : unit -> tval lock : t -> unitlock mtx locks mtx, possibly waiting for it to be released first by another thread.
- raises Unix_error
if
lockattempts to acquiremtxrecursively.
val try_lock : t -> [ `Already_held_by_me_or_other | `Acquired ]try_lock is like lock, but always returns immediately. If the calling thread or another one already has the mutex it returns `Already_held_by_me_or_other, otherwise it locks it and returns `Acquired.
val unlock : t -> unitunlock mtx unlocks mtx.
- raises Unix_error
if
unlockattempts to release an unacquired mutex or a mutex held by another thread.
val critical_section : t -> f:(unit -> 'a) -> 'acritical_section t ~f locks t, runs f, unlocks t, and returns the result of f (or raises if f raised).
synchronize f creates a mutex and returns a new function that is identical to f except that the mutex is held during its execution.
val update_signal : t -> Condition.t -> f:(unit -> 'a) -> 'aupdate_signal mtx cnd ~f updates some state within a critical section protected by mutex mtx using function f and signals condition variable cnd after finishing. If f raises an exception, the condition will NOT be signaled!
val update_broadcast : t -> Condition.t -> f:(unit -> 'a) -> 'aupdate_broadcast mtx cnd ~f updates some state within a critical section protected by mutex mtx using function f and broadcasts condition variable cnd after finishing. If f raises an exception, the condition will NOT be broadcast!