Модуль Семафоры
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