Module Condition


module Condition: sig  end
スレッドの同期をとる状態変数 (condition variable) です。

condition variable は、あるスレッドを他のスレッドがあることを終えるまで停止させたいときに使います。前者は condition variable を待ち (wait) 、後者は何かをし終えたら状態を伝えます (signal) 。condition variable には mutex を併用してください。以下に使用例を示します (m は mutex 、c は condition variable で、データ構造 D に対応しています) 。


     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 satified *) then Condition.signal c;
     Mutex.unlock m
   



type t
condition variable の型です。

val create : unit -> t
新しい condition variable を返します。
val wait : t -> Mutex.t -> unit
wait c m は自動的に mutex m をアンロックし、condition variable c を待ち、呼び出したスレッドの実行を停止します。condition variable c が signal されたらプロセスは再スタートします。wait が終了する前に、mutex m は再度ロックされます。
val signal : t -> unit
signal c は、condition variable c を待っているプロセス 1 つを再スタートさせます。
val broadcast : t -> unit
broadcast c は、condition variable c を待っているプロセスすべてを再スタートさせます。