模組 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