Module Condition

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.

let create: unit => t;

Return a new condition variable.

let 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. The mutex m is locked again before wait returns.

let signal: t => unit;

signal c restarts one of the processes waiting on the condition variable c.

let broadcast: t => unit;

broadcast c restarts all processes waiting on the condition variable c.