diff options
author | Adam Carpenter <53hornet@gmail.com> | 2019-03-13 10:02:15 -0400 |
---|---|---|
committer | Adam Carpenter <53hornet@gmail.com> | 2019-03-13 10:02:15 -0400 |
commit | 8a4d2fb922c2c5a9e900b4b836d7787a09a1fe90 (patch) | |
tree | afb760597bf4cc78194892be910febde0209f7f3 /concurrency/src | |
parent | b71e253b697bae079a0cf2526209334f4b81f9a5 (diff) | |
download | learning-rust-8a4d2fb922c2c5a9e900b4b836d7787a09a1fe90.tar.xz learning-rust-8a4d2fb922c2c5a9e900b4b836d7787a09a1fe90.zip |
Added concurrency, pointers, oop
Diffstat (limited to 'concurrency/src')
-rw-r--r-- | concurrency/src/main.rs | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/concurrency/src/main.rs b/concurrency/src/main.rs new file mode 100644 index 0000000..53417eb --- /dev/null +++ b/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."); +} |