Spec-Zone.ru › OCaml 5.0

Модуль Семафоры

module Semaphore: sig .. end

Семафоры

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

Предоставляются два типа семафоров: счетные семафоры и двоичные семафоры.

  • Since 4.12

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

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

Два основных действия с семафорами:

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

Двоичные семафоры

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

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

"release" операция двоичного семафора устанавливает его значение в 1, а "acquire" ожидает, пока значение не будет 1, и устанавливает его в 0.

Двоичный семафор может использоваться вместо мьютекса (см. модуль Mutex), когда дисциплина мьютекса (блокировка мьютекса только потоком, который его заблокировал) слишком ограничивает. Операция "acquire" соответствует блокировке мьютекса, а операция "release" — разблокировке, но "release" может быть выполнена в другом потоке, отличном от того, который выполнил "acquire". Аналогично, безопасно разблокировать двоичный семафор, который уже доступен.

module Binary: sig .. end

© 1995-2022 INRIA.
https://v2.ocaml.org/releases/5.0/htmlman/libref/Semaphore.html

Spec-Zone.ru

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