From a8c9c92f7544402b02f4e7dc522a13a16bd36c57 Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Sun, 24 Jan 2021 23:46:49 +0800 Subject: [PATCH] feat: add example multi chan --- .../examples/multi_chan.rs | 37 +++++++++++++++++++ __concurrent/crossbeam_n_parking_lot/justfile | 8 ++++ 2 files changed, 45 insertions(+) create mode 100644 __concurrent/crossbeam_n_parking_lot/examples/multi_chan.rs create mode 100644 __concurrent/crossbeam_n_parking_lot/justfile diff --git a/__concurrent/crossbeam_n_parking_lot/examples/multi_chan.rs b/__concurrent/crossbeam_n_parking_lot/examples/multi_chan.rs new file mode 100644 index 0000000..2184737 --- /dev/null +++ b/__concurrent/crossbeam_n_parking_lot/examples/multi_chan.rs @@ -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(); +} diff --git a/__concurrent/crossbeam_n_parking_lot/justfile b/__concurrent/crossbeam_n_parking_lot/justfile new file mode 100644 index 0000000..5bbdd83 --- /dev/null +++ b/__concurrent/crossbeam_n_parking_lot/justfile @@ -0,0 +1,8 @@ +_: + @just --list + +ex-multi-chan: + cargo r --example multi_chan + + +