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,
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
The type of condition variables.
val create :
unit -> t
Return a new condition variable.
val wait :
t -> Mutex.t -> unit
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.
m is locked again before
val signal :
t -> unit
signal c restarts one of the processes waiting on the
val broadcast :
t -> unit
broadcast c restarts all processes waiting on the