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-2024 INRIA.
https://ocaml.org/manual/5.2/api/Mutex.html

Spec-Zone.ru

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