From 7e8ee5ed9cad6484e9f13f81731b102ced58402e Mon Sep 17 00:00:00 2001 From: Adam Carpenter Date: Tue, 9 Jul 2019 15:14:04 -0400 Subject: Init. --- rust-book/concurrency/Cargo.lock | 4 ++ rust-book/concurrency/Cargo.toml | 7 ++ rust-book/concurrency/src/main.rs | 137 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 148 insertions(+) create mode 100755 rust-book/concurrency/Cargo.lock create mode 100755 rust-book/concurrency/Cargo.toml create mode 100755 rust-book/concurrency/src/main.rs (limited to 'rust-book/concurrency') diff --git a/rust-book/concurrency/Cargo.lock b/rust-book/concurrency/Cargo.lock new file mode 100755 index 0000000..74a4d7a --- /dev/null +++ b/rust-book/concurrency/Cargo.lock @@ -0,0 +1,4 @@ +[[package]] +name = "concurrency" +version = "0.1.0" + diff --git a/rust-book/concurrency/Cargo.toml b/rust-book/concurrency/Cargo.toml new file mode 100755 index 0000000..0bfe465 --- /dev/null +++ b/rust-book/concurrency/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "concurrency" +version = "0.1.0" +authors = ["Adam Carpenter <53hornet@gmail.com>"] +edition = "2018" + +[dependencies] diff --git a/rust-book/concurrency/src/main.rs b/rust-book/concurrency/src/main.rs new file mode 100755 index 0000000..53417eb --- /dev/null +++ b/rust-book/concurrency/src/main.rs @@ -0,0 +1,137 @@ +use std::sync::Arc; +use std::rc::Rc; +use std::sync::Mutex; +use std::thread; +use std::sync::mpsc; +use std::time::Duration; + +fn main() { +// let handle = thread::spawn(|| { +// for i in 1..10 { +// println!("spawned: {}", i); +// thread::sleep(Duration::from_millis(1)); +// } +// }); +// +// for i in 1..5 { +// println!("main: {}", i); +// thread::sleep(Duration::from_millis(1)); +// } +// +// handle.join().unwrap(); + + + +// let v = vec![1, 2, 3]; +// +// let handle = thread::spawn(move || { +// println!("Here's a vector: {:?}", v); +// }); +// +// drop(v); +// handle.join().unwrap(); + + + +// let (tx, rx) = mpsc::channel(); +// +// thread::spawn(move || { +// let val = String::from("hi"); +// tx.send(val).unwrap(); +// dbg!(val); +// }); +// +// let received = rx.recv().unwrap(); +// dbg!(received); + + + +// let (tx, rx) = mpsc::channel(); +// +// thread::spawn(move || { +// let vals = vec![ +// String::from("the"), +// String::from("walking"), +// String::from("thread"), +// ]; +// +// for val in vals { +// tx.send(val).unwrap(); +// thread::sleep(Duration::from_secs(1)); +// } +// }); +// +// for received in rx { +// println!("got {}", received); +// } + + + +// let (tx, rx) = mpsc::channel(); +// +// let tx1 = mpsc::Sender::clone(&tx); +// thread::spawn(move || { +// let vals = vec![ +// String::from("the"), +// String::from("walking"), +// String::from("thread"), +// ]; +// +// for val in vals { +// tx1.send(val).unwrap(); +// thread::sleep(Duration::from_secs(1)); +// } +// }); +// +// thread::spawn(move || { +// let vals = vec![ +// String::from("welcome"), +// String::from("to"), +// String::from("woodberry"), +// String::from("!"), +// ]; +// +// for val in vals { +// tx.send(val).unwrap(); +// thread::sleep(Duration::from_secs(1)); +// } +// }); +// +// for received in rx { +// dbg!(received); +// } + + + +// let m = Mutex::new(5); +// +// { +// let mut num = m.lock().unwrap(); +// *num = 6; +// } +// +// println!("m = {:?}", m); + + + + let counter = Arc::new(Mutex::new(0)); + let mut handles = vec![]; + + for _ in 0..10 { + let counter = Arc::clone(&counter); + let handle = thread::spawn(move || { + let mut num = counter.lock().unwrap(); + + *num += 1; + }); + handles.push(handle); + } + + for handle in handles { + handle.join().unwrap(); + } + + dbg!(*counter.lock().unwrap()); + + println!("Done."); +} -- cgit v1.2.3