pub fn bounded<T>(cap: usize) -> (Sender<T>, Receiver<T>)
Expand description
Creates a channel of bounded capacity.
This channel has a buffer that can hold at most cap
messages at a time.
A special case is zero-capacity channel, which cannot hold any messages. Instead, send and receive operations must appear at the same time in order to pair up and pass the message over.
§Examples
A channel of capacity 1:
use std::thread;
use std::time::Duration;
use crossbeam_channel::bounded;
let (s, r) = bounded(1);
// This call returns immediately because there is enough space in the channel.
s.send(1).unwrap();
thread::spawn(move || {
// This call blocks the current thread because the channel is full.
// It will be able to complete only after the first message is received.
s.send(2).unwrap();
});
thread::sleep(Duration::from_secs(1));
assert_eq!(r.recv(), Ok(1));
assert_eq!(r.recv(), Ok(2));
A zero-capacity channel:
use std::thread;
use std::time::Duration;
use crossbeam_channel::bounded;
let (s, r) = bounded(0);
thread::spawn(move || {
// This call blocks the current thread until a receive operation appears
// on the other side of the channel.
s.send(1).unwrap();
});
thread::sleep(Duration::from_secs(1));
assert_eq!(r.recv(), Ok(1));