module Condition: sig end
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
val create : unit -> t
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
を待っているプロセスすべてを再スタートさせます。