package ocaml-base-compiler
Condition variables to synchronize between threads.
Condition variables are used when one thread wants to wait until another thread has finished doing something: the former thread 'waits' on the condition variable, the latter thread 'signals' the condition when it is done. Condition variables should always be protected by a mutex. The typical use is (if D
is a shared data structure, m
its mutex, and c
is a condition variable):
Mutex.lock m;
while (* some predicate P over D is not satisfied *) do
Condition.wait c m
done;
(* Modify D *)
if (* the predicate P over D is now satisfied *) then Condition.signal c;
Mutex.unlock m
val create : unit -> t
Return a new condition variable.
wait c m
atomically unlocks the mutex m
and suspends the calling process on the condition variable c
. The process will restart after the condition variable c
has been signalled. The mutex m
is locked again before wait
returns.
val signal : t -> unit
signal c
restarts one of the processes waiting on the condition variable c
.
val broadcast : t -> unit
broadcast c
restarts all processes waiting on the condition variable c
.