11.2.2 Channels (original) (raw)
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-getwould not block; the channel’s synchronization result is the same as the channel-get result.
For buffered asynchronous channels, see Buffered Asynchronous Channels.
Returns #t if v is a channel,#f otherwise.
Creates and returns a new channel. The channel can be used withchannel-get, with channel-try-get, or as asynchronizable event (see Events) to receive a value through the channel. The channel can be used with channel-putor through the result of channel-put-evt to send a value through the channel.
Blocks until a sender is ready to provide a value throughch. The result is the sent value.
Receives and returns a value from ch if a sender is immediately ready, otherwise returns #f.
Blocks until a receiver is ready to accept the value vthrough ch.
Returns #t if v is a channel-put event produced bychannel-put-evt, #f otherwise.