Модуль Condition
module Condition: sig .. end
Переменные состояния для синхронизации потоков.
Переменные состояния используются, когда один поток хочет ждать, пока другой поток закончит что-то делать: первый поток «ждет» на переменной состояния, второй поток «сигнализирует» состояние, когда он закончит. Переменные состояния всегда должны защищаться мьютексом. Типичное использование (если D это общая структура данных, m её мьютекс, и c это переменная состояния):
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
Тип переменных состояния.
val create : unit -> t
Возвращает новую переменную состояния.
val wait : t -> Mutex.t -> unit
wait c m атомарно разблокирует мьютекс m и приостанавливает вызывающий процесс на переменной состояния c. Процесс перезапустится после того, как переменная состояния c будет сигнализирована. Мьютекс m снова заблокируется перед тем, как wait вернётся.
val signal : t -> unit
signal c перезапускает один из процессов, ожидающих на переменной состояния c.
val broadcast : t -> unit
broadcast c перезапускает все процессы, ожидающие на переменной состояния c.
© 1995-2022 INRIA.
https://v2.ocaml.org/releases/4.14/htmlman/libref/Condition.html