concepts: Shared memory and mutex between threads
authorMartin Pitt <martin@piware.de>
Sun, 29 Aug 2021 08:15:43 +0000 (10:15 +0200)
committerMartin Pitt <martin@piware.de>
Sun, 29 Aug 2021 08:15:47 +0000 (10:15 +0200)
concepts/src/main.rs

index 65fb785c838a2a966e6c1d4c5494f4751d5f0b0d..94bdb960aa7e79b80d4ad22f082ab2822e6c1fbc 100644 (file)
@@ -205,6 +205,7 @@ fn test_threads() {
 
     t1.join().unwrap();
 
 
     t1.join().unwrap();
 
+    // message passing
     let (tx1, rx) = sync::mpsc::channel();
     let tx2 = tx1.clone();
 
     let (tx1, rx) = sync::mpsc::channel();
     let tx2 = tx1.clone();
 
@@ -228,6 +229,22 @@ fn test_threads() {
 
     sender1.join().unwrap();
     sender2.join().unwrap();
 
     sender1.join().unwrap();
     sender2.join().unwrap();
+
+    // shared state
+    let counter = sync::Arc::new(sync::Mutex::new(0));
+    let mut threads = vec![];
+    for _ in 0..10 {
+        let tc = sync::Arc::clone(&counter);
+        threads.push(thread::spawn(move || {
+            *tc.lock().unwrap() += 1;
+        }));
+    }
+
+    for t in threads {
+        t.join().unwrap();
+    }
+
+    println!("counter: {}", *counter.lock().unwrap());
 }
 
 fn main() {
 }
 
 fn main() {