Модуль Event
module Event: sig .. end
Синхронная коммуникация как объект первого класса.
Этот модуль реализует синхронное взаимодействие между потоками через каналы. Как и в системе Concurrent ML Джона Реппи, события коммуникации являются значениями первого класса: их можно создавать и комбинировать независимо друг от друга, прежде чем предложить для коммуникации.
type 'a channel
Тип каналов коммуникации, передающих значения типа 'a.
val new_channel : unit -> 'a channel
Возвращает новый канал.
type +'a event
Тип событий коммуникации, возвращающих результат типа 'a.
val send : 'a channel -> 'a -> unit event
send ch v возвращает событие, состоящее в отправке значения v через канал ch. Результатом этого события является ().
val receive : 'a channel -> 'a event
receive ch возвращает событие, состоящее в получении значения из канала ch. Результатом этого события является полученное значение.
val always : 'a -> 'a event
always v возвращает событие, всегда готовое к синхронизации. Результатом этого события является v.
val choose : 'a event list -> 'a event
choose evl возвращает событие, являющееся альтернативой всех событий из списка evl.
val wrap : 'a event -> ('a -> 'b) -> 'b event
wrap ev fn возвращает событие, выполняющее те же коммуникации, что и ev, а затем применяющее функцию постобработки fn к возвращаемому значению.
val wrap_abort : 'a event -> (unit -> unit) -> 'a event
wrap_abort ev fn возвращает событие, выполняющее те же коммуникации, что и ev, но если оно не выбрано, функция fn вызывается после синхронизации.
val guard : (unit -> 'a event) -> 'a event
guard fn возвращает событие, которое при синхронизации вычисляет fn() и ведёт себя как полученное в результате событие. Это позволяет вычислять события с побочными эффектами в момент операции синхронизации.
val sync : 'a event -> 'a
Выполняет «синхронизацию» события: предлагает внешнему миру все указанные в событии возможности коммуникации и блокирует выполнение, пока одна из коммуникаций не завершится успешно. Возвращается результат этой коммуникации.
val select : 'a event list -> 'a
Выполняет «синхронизацию» альтернативы событий. select evl — это сокращение для sync(choose evl).
val poll : 'a event -> 'a option
Неблокирующая версия Event.sync: предлагает внешнему миру все указанные в событии возможности коммуникации и, если одна из них может произойти немедленно, выполняет её и возвращает Some r, где r — результат этой коммуникации. В противном случае возвращает None, не блокируя выполнение.
© 1995-2026 INRIA.
https://ocaml.org/manual/5.5/api/Event.html