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."); }