feat: add example multi chan
This commit is contained in:
37
__concurrent/crossbeam_n_parking_lot/examples/multi_chan.rs
Normal file
37
__concurrent/crossbeam_n_parking_lot/examples/multi_chan.rs
Normal file
@@ -0,0 +1,37 @@
|
||||
use std::thread;
|
||||
use crossbeam_channel::bounded;
|
||||
|
||||
fn main() {
|
||||
let (s, r) = bounded(0);
|
||||
|
||||
let mut ts = vec![];
|
||||
for ti in 0..4 {
|
||||
let copied_sender = s.clone();
|
||||
let t = thread::spawn(move|| {
|
||||
println!("Start: {}", ti);
|
||||
for i in 0..100000_u64 {
|
||||
copied_sender.send(Some(i)).unwrap();
|
||||
}
|
||||
println!("End: {}", ti);
|
||||
});
|
||||
ts.push(t);
|
||||
}
|
||||
let tt = thread::spawn(move || {
|
||||
println!("Start collect");
|
||||
let mut sum = 0_u64;
|
||||
loop {
|
||||
let x = r.recv().unwrap();
|
||||
match x {
|
||||
None => break,
|
||||
Some(x) => sum+=x,
|
||||
}
|
||||
}
|
||||
println!("Enc collect");
|
||||
println!("Sum: {}", sum);
|
||||
});
|
||||
for t in ts {
|
||||
t.join().unwrap();
|
||||
}
|
||||
s.send(None).unwrap();
|
||||
tt.join().unwrap();
|
||||
}
|
||||
8
__concurrent/crossbeam_n_parking_lot/justfile
Normal file
8
__concurrent/crossbeam_n_parking_lot/justfile
Normal file
@@ -0,0 +1,8 @@
|
||||
_:
|
||||
@just --list
|
||||
|
||||
ex-multi-chan:
|
||||
cargo r --example multi_chan
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user