From e3ac142eaddd4dc69c9e1e1f963d76ed6aa9b36c Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Sat, 26 Dec 2020 09:20:48 +0800 Subject: [PATCH] feat: parking_lot --- .../crossbeam_n_parking_lot/src/main.rs | 34 +++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/__concurrent/crossbeam_n_parking_lot/src/main.rs b/__concurrent/crossbeam_n_parking_lot/src/main.rs index 37b87f8..21457f2 100644 --- a/__concurrent/crossbeam_n_parking_lot/src/main.rs +++ b/__concurrent/crossbeam_n_parking_lot/src/main.rs @@ -1,16 +1,38 @@ +// use crossbeam::atomic::AtomicCell; use crossbeam_channel::unbounded; -// use lock_api::Mutex; -// use std::sync::Arc; +use parking_lot::FairMutex; +use parking_lot::RwLock; +use std::sync::Arc; use std::thread; +use std::time::Duration; fn main() { - // let lock = Arc::new(Mutex::new::(0_i32)); + let mutex = Arc::new(FairMutex::new(0_i32)); + let rw_lock = Arc::new(RwLock::new(0_i32)); + // let cell = AtomicCell::new(0_i32); + let (s, r) = unbounded::(); + let thead_mutex = mutex.clone(); + let thread_rw_lock = rw_lock.clone(); thread::spawn(move || { - s.send(1).unwrap(); + for i in 1..=10 { + thread::sleep(Duration::from_millis(500)); + s.send(i).unwrap(); + + let mut m = thead_mutex.lock(); + *m += 1; + let mut rw = thread_rw_lock.write(); + *rw += 1; + } + s.send(-1).unwrap(); }); - let x = r.recv().unwrap(); - println!("Received: {}", x); + loop { + let x = r.recv().unwrap(); + if x < 0 { + break; + } + println!("Received: {}, mutext: {}, rw_lock: {}", x, *mutex.lock(), *rw_lock.read()); + } }