Spec-Zone.ru › OCaml

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

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

Spec-Zone.ru

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