Spec-Zone.ru › OCaml

Модуль Semaphore

module Semaphore: sig .. end

Семафоры

Семафор — это средство синхронизации потоков, которое можно использовать для управления доступом к общему ресурсу.

Предусмотрено два типа семафоров: счётные и бинарные.

  • С версии 4.12

Счётные семафоры

Счётный семафор — это счётчик, к которому могут одновременно обращаться несколько потоков. Обычно его используют для синхронизации производителей и потребителей ресурса, подсчитывая количество доступных единиц ресурса.

Две основные операции над семафорами:

  • «освободить» (также называемая «V», «post», «up» и «signal»), увеличивает значение счётчика. Это соответствует производству ещё одной единицы общего ресурса и делает её доступной другим.
  • «получить» (также называемая «P», «wait», «down» и «pend»), ожидает, пока значение счётчика не станет больше нуля, а затем уменьшает его. Это соответствует потреблению одной единицы общего ресурса.
module Counting: sig .. end

Бинарные семафоры

Бинарные семафоры — это разновидность счётных семафоров, которые могут принимать только два значения: 0 и 1.

Бинарный семафор можно использовать для управления доступом к одному общему ресурсу: значение 1 означает «ресурс доступен», а значение 0 — «ресурс недоступен».

Операция «освободить» бинарного семафора устанавливает его значение в 1, а операция «получить» ожидает, пока значение не станет равным 1, и устанавливает его в 0.

Бинарный семафор можно использовать вместо мьютекса (см. модуль Mutex), если правила работы с мьютексом (снимать блокировку может только поток, который её установил) слишком ограничительны. Операция «получить» соответствует блокировке мьютекса, а операция «освободить» — снятию блокировки, но выполнить операцию «освободить» может поток, отличный от того, который выполнил операцию «получить». Кроме того, безопасно освобождать бинарный семафор, который уже доступен.

module Binary: sig .. end

© 1995-2026 INRIA.
https://ocaml.org/manual/5.5/api/Semaphore.html

Spec-Zone.ru

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