11.2.2 Channels
A channel both synchronizes a pair of threads and passes a value from one to the other. Channels are synchronous; both the sender and the receiver must block until the (atomic) transaction is complete. Multiple senders and receivers can access a channel at once, but a single sender and receiver is selected for each transaction.
Channel synchronization is fair: if a thread is blocked on a channel and transaction opportunities for the channel occur infinitely often, then the thread eventually participates in a transaction.
In addition to its use with channel-specific procedures, a channel can be used as a synchronizable event (see Events). A channel is ready for synchronization when channel-get would not block; the channel’s synchronization result is the same as the channel-get result.
For buffered asynchronous channels, see Buffered Asynchronous Channels.
procedure
(make-channel) → channel?
procedure
(channel-get ch) → any
ch : channel?
procedure
(channel-try-get ch) → any
ch : channel?
procedure
(channel-put ch v) → void?
ch : channel? v : any/c
procedure
(channel-put-evt ch v) → channel-put-evt?
ch : channel? v : any/c
procedure
(channel-put-evt? v) → boolean?
v : any/c