模块 Event

module Event: sig .. end

一等同步通信。

此模块通过通道实现线程间的同步通信。与 John Reppy 的 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 返回由通过通道 ch 发送值 v 组成的事件。此事件的结果值为 ()

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 evlsync(choose evl) 的简写。

val poll : 'a event -> 'a option

Event.sync 的非阻塞版本:将事件中指定的所有通信可能性提供给外部世界,如果其中一个可以立即发生,则执行它并返回 Some r,其中 r 是该通信的结果值。否则,返回 None 而不阻塞。