Here\'s the code:
use std::thread;
use std::sync::mpsc;
fn main() {
//spawn threads
let (tx, rx) = mpsc::chann
tx
in your main thread is not dropped until the end of the main
function, and rx
will not be closed until all senders have been dropped.
To fix this, you can manually drop it with drop(tx)
after you have started all of your threads:
use std::thread;
use std::sync::mpsc;
fn main() {
//spawn threads
let (tx, rx) = mpsc::channel();
for mut i in 0 .. 10 {
let txc = tx.clone(); //clone from the main sender
thread::spawn( move || {
i += 20;
println!("Sending: {}", i);
txc.send(i).unwrap_or_else(|e| {
eprintln!("{}", e);
});
});
}
// drop tx manually, to ensure that only senders in spawned threads are still in use
drop(tx);
for received in rx {
println!("Received: {}", received);
}
}