module Condition:sig..end
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
type t
The type of condition variables.
val create : unit -> tReturn a new condition variable.
val wait : t -> Mutex.t -> unitwait 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 -> unitsignal c restarts one of the processes waiting on the
condition variable c.
val broadcast : t -> unitbroadcast c restarts all processes waiting on the
condition variable c.