Spec-Zone.ru › OCaml

Модуль 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API