pub fn bounded<T>(cap: usize) -> (Sender<T>, Receiver<T>)
Expand description
Create a channel with a maximum capacity.
Create a bounded channel with a Sender
and Receiver
connected to each end respectively. Values sent in one
end of the channel will be received on the other end. The channel is thread-safe, and both Sender
and
Receiver
may be sent to or shared between threads as necessary. In addition, both Sender
and Receiver
may be cloned.
Unlike an unbounded
channel, if there is no space left for new messages, calls to
Sender::send
will block (unblocking once a receiver has made space). If blocking behaviour
is not desired, Sender::try_send
may be used.
Like std::sync::mpsc
, flume
supports ‘rendezvous’ channels. A bounded queue with a maximum capacity of zero
will block senders until a receiver is available to take the value. You can imagine a rendezvous channel as a
‘Glienicke Bridge’-style location at which senders and receivers
perform a handshake and transfer ownership of a value.
Examples
let (tx, rx) = flume::bounded(32);
for i in 1..33 {
tx.send(i).unwrap();
}
assert!(tx.try_send(33).is_err());
assert_eq!(rx.try_iter().sum::<u32>(), (1..33).sum());