Модуль 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-2024 INRIA.
https://ocaml.org/manual/5.2/api/Event.html