1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
| use std::thread; use std::time::Duration; use std::sync::mpsc; use std::sync::{Mutex, Arc};
fn main() {
let handle = thread::spawn(|| { for i in 1..10 { println!("hi number {} from the spawned thread!", i); thread::sleep(Duration::from_millis(1)); } });
for i in 1..5 { println!("hi number {} from the main thread!", 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); });
handle.join().unwrap();
let (tx, rx) = mpsc::channel(); thread::spawn(move || { let val = String::from("hi"); tx.send(val).unwrap(); });
let received = rx.recv().unwrap(); println!("Got: {}", received);
let (tx, rx) = mpsc::channel(); thread::spawn(move || { let vals = vec![ String::from("hello"), String::from("from"), String::from("the"), 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 m = Mutex::new(5); { let mut num = m.lock().unwrap(); *num = 6; }
println!("m is {:?}", 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(); }
println!("Result: {}", *counter.lock().unwrap());
}
|