[Day3] Read Rust Atomics and Locks
by Mara Bos
At Topics: Chapter 1. Basics of Rust Concurrency
Recall
What is .join()
? => make sure the threads are finished before we return from main
fn main() { let t1 = thread::spawn(f); // use JoinHandle to ahcieve it // The .join() method waits until the thread has finished executing // and returns a std::thread::Result. // unwrap() is for panic t1.join().unwrap(); }
Notes
-
The
std::thread::spawn
function is actually just a convenient shorthand forstd::thread::Builder::new().spawn().unwrap()
Eg:
let numbers = Vec::from_iter(0..=1000); let t = thread::spawn(move || { let len = numbers.len(); let sum = numbers.iter().sum::<usize>(); sum / len }); let average = t.join().unwrap(); println!("average: {average}");
-
A
std::thread::Builder
can: eg set size, give thread a name -
The
std::thread::spawn
function simply panics if it is unable to spawn a new thread => bystd::io::Result
Not Understand Yet
-
for loop in closure: &number vs number
let numbers = vec![1, 2, 3]; thread::spawn(move || { for n in &numbers { // <== here println!("{n}"); } }).join().unwrap(); // vs let numbers = vec![1, 2, 3]; thread::spawn(move || { for n in numbers { // <== here println!("{n}"); } }).join().unwrap();