Модуль Mutex
module Mutex: sig .. end
Блокировки для взаимного исключения.
Мьютексы (блокировки взаимного исключения) используются для реализации критических секций и защиты общих изменяемых структур данных от одновременного доступа. Типичное использование (если m — мьютекс, связанный со структурой данных D):
Mutex.lock m;
(* Critical section that operates over D *);
Mutex.unlock m
type t
Тип мьютексов.
val create : unit -> t
Возвращает новый мьютекс.
val lock : t -> unit
Заблокировать заданный мьютекс. Только один поток может заблокировать мьютекс в любой момент. Поток, пытающийся заблокировать мьютекс, уже заблокированный другим потоком, будет приостановлен, пока другой поток не разблокирует мьютекс.
-
До версии 4.12
Sys_errorне генерировалась для рекурсивной блокировки (платформозависимое поведение) -
Возвращает
Sys_errorесли мьютекс уже заблокирован потоком, вызывающимMutex.lock.
val try_lock : t -> bool
То же, что и Mutex.lock, но не приостанавливает вызывающий поток, если мьютекс уже заблокирован: в этом случае просто возвращает false сразу. Если мьютекс разблокирован, заблокируйте его и верните true.
val unlock : t -> unit
Разблокировать заданный мьютекс. Другие приостановленные потоки, пытающиеся заблокировать мьютекс, возобновятся. Мьютекс должен быть предварительно заблокирован потоком, вызывающим Mutex.unlock.
-
До версии 4.12
Sys_errorне генерировалась при разблокировке разблокированного мьютекса или при разблокировке мьютекса другим потоком. -
Возвращает
Sys_errorесли мьютекс разблокирован или был заблокирован другим потоком.
© 1995-2022 INRIA.
https://v2.ocaml.org/releases/5.0/htmlman/libref/Mutex.html