31 lines
690 B
Rust
31 lines
690 B
Rust
|
fn main() {
|
||
|
let thread_num = 32;
|
||
|
let msg_num = 16;
|
||
|
|
||
|
let (mut main_tx, main_rx) = flume::bounded::<()>(1);
|
||
|
|
||
|
for _ in 0..thread_num {
|
||
|
let (mut tx, rx) = flume::bounded(1);
|
||
|
std::mem::swap(&mut tx, &mut main_tx);
|
||
|
|
||
|
std::thread::spawn(move || {
|
||
|
for msg in rx.iter() {
|
||
|
tx.send(msg).unwrap();
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
for _ in 0..1000 {
|
||
|
let main_tx = main_tx.clone();
|
||
|
std::thread::spawn(move || {
|
||
|
for _ in 0..msg_num {
|
||
|
main_tx.send(Default::default()).unwrap();
|
||
|
}
|
||
|
});
|
||
|
|
||
|
for _ in 0..msg_num {
|
||
|
main_rx.recv().unwrap();
|
||
|
}
|
||
|
}
|
||
|
}
|