summaryrefslogtreecommitdiff
path: root/concurrency
diff options
context:
space:
mode:
authorAdam Carpenter <53hornet@gmail.com>2019-03-13 10:02:15 -0400
committerAdam Carpenter <53hornet@gmail.com>2019-03-13 10:02:15 -0400
commit8a4d2fb922c2c5a9e900b4b836d7787a09a1fe90 (patch)
treeafb760597bf4cc78194892be910febde0209f7f3 /concurrency
parentb71e253b697bae079a0cf2526209334f4b81f9a5 (diff)
downloadlearning-rust-8a4d2fb922c2c5a9e900b4b836d7787a09a1fe90.tar.xz
learning-rust-8a4d2fb922c2c5a9e900b4b836d7787a09a1fe90.zip
Added concurrency, pointers, oop
Diffstat (limited to 'concurrency')
-rw-r--r--concurrency/Cargo.toml7
-rw-r--r--concurrency/src/main.rs137
2 files changed, 144 insertions, 0 deletions
diff --git a/concurrency/Cargo.toml b/concurrency/Cargo.toml
new file mode 100644
index 0000000..0bfe465
--- /dev/null
+++ b/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/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.");
+}