Модуль 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, если мьютекс разблокирован или был заблокирован другим потоком.
val protect : t -> (unit -> 'a) -> 'a
protect mutex f выполняет f() в критической секции, в которой mutex заблокирован (с помощью Mutex.lock); затем освобождает mutex независимо от того, вернуло ли f() значение или вызвало исключение.
Операция разблокировки гарантированно выполняется всегда, даже если в обработчике сигнала возникает асинхронное исключение (например, Sys.Break).
- Начиная с версии 5.1
© 1995-2026 INRIA.
https://ocaml.org/manual/5.5/api/Mutex.html