First-class synchronous communication.
This module implements synchronous inter-thread communications over channels. As in John Reppy's Concurrent ML system, the communication events are first-class values: they can be built and combined independently before being offered for communication.
The type of communication channels carrying values of type
val new_channel :
unit -> 'a channel
Return a new channel.
The type of communication events returning a result of type
val send :
'a channel -> 'a -> unit event
send ch v returns the event consisting in sending the value
over the channel
ch. The result value of this event is
val receive :
'a channel -> 'a event
receive ch returns the event consisting in receiving a value
from the channel
ch. The result value of this event is the
val always :
'a -> 'a event
always v returns an event that is always ready for
synchronization. The result value of this event is
val choose :
'a event list -> 'a event
choose evl returns the event that is the alternative of
all the events in the list
val wrap :
'a event -> ('a -> 'b) -> 'b event
wrap ev fn returns the event that performs the same communications
ev, then applies the post-processing function
on the return value.
val wrap_abort :
'a event -> (unit -> unit) -> 'a event
wrap_abort ev fn returns the event that performs
the same communications as
ev, but if it is not selected
fn is called after the synchronization.
val guard :
(unit -> 'a event) -> 'a event
guard fn returns the event that, when synchronized, computes
fn() and behaves as the resulting event. This enables
computing events with side-effects at the time of the synchronization
val sync :
'a event -> 'a
'Synchronize' on an event: offer all the communication possibilities specified in the event to the outside world, and block until one of the communications succeed. The result value of that communication is returned.
val select :
'a event list -> 'a
'Synchronize' on an alternative of events.
select evl is shorthand for
val poll :
'a event -> 'a option
Non-blocking version of
Event.sync: offer all the communication
possibilities specified in the event to the outside world,
and if one can take place immediately, perform it and return
Some r where
r is the result value of that communication.
None without blocking.