Модуль Семафор
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-2024 INRIA.
https://ocaml.org/manual/5.2/api/Semaphore.html