- mpsc
- channel
- send
- drop
- TODO
Counter with message passing
- Solution using messages
examples/threads/counter-with-messages/src/main.rs
fn main() { let threads = 10; let limit = 1000; let result = count_with_messages(threads, limit); println!("{}", result); assert_eq!(result, threads * limit); } fn count_with_messages(threads: i32, limit: i32) -> i32 { let mut counter = 0; let (tx, rx) = std::sync::mpsc::channel(); for _ in 1..=threads { let local_tx = tx.clone(); std::thread::spawn(move || { //println!("{:?}", std::thread::current().id()); for _ in 1..=limit { local_tx.send(1).unwrap(); } }); } drop(tx); // we need to close this Sender so the next loop will end properly for received in rx { counter += received; } counter }