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 evl
是 sync(choose evl)
的简写。
val poll : 'a event -> 'a option
Event.sync
的非阻塞版本:将事件中指定的所有通信可能性提供给外部世界,如果其中一个可以立即发生,则执行它并返回 Some r
,其中 r
是该通信的结果值。否则,返回 None
而不阻塞。