Producer Consumer With Channels
Send messages from producer threads to a consumer over an mpsc channel, letting the receiver drain work without shared mutable state.
Code
use std::sync::mpsc;
use std::thread;
fn main() {
let (sender, receiver) = mpsc::channel::<u32>();
let producers: Vec<_> = (0..3)
.map(|id| {
let sender = sender.clone();
thread::spawn(move || {
for item in 1..=3 {
sender.send(id * 10 + item).expect("send failed");
}
})
})
.collect();
drop(sender);
let consumer = thread::spawn(move || {
let mut total = 0u32;
while let Ok(value) = receiver.recv() {
total += value;
}
total
});
for handle in producers {
handle.join().expect("producer panicked");
}
let total = consumer.join().expect("consumer panicked");
println!("total = {total}");
}Report a problem with this exampleOpens a pre-filled issue on GitHub.