面试题答案
一键面试use std::sync::{Arc, Mutex};
use std::thread;
fn main() {
let shared_variable = Arc::new(Mutex::new(0));
let mut handles = vec![];
for _ in 0..10 {
let shared_variable = Arc::clone(&shared_variable);
let handle = thread::spawn(move || {
let mut num = shared_variable.lock().unwrap();
*num += 1;
});
handles.push(handle);
}
for handle in handles {
handle.join().unwrap();
}
let final_value = shared_variable.lock().unwrap();
println!("Final value: {}", *final_value);
}
Mutex
的作用
Mutex
(互斥锁)用于保护共享数据,确保在同一时间只有一个线程可以访问共享变量。在代码中,通过shared_variable.lock().unwrap()
获取锁,这使得只有获取到锁的线程能够对共享变量*num
进行操作,其他线程在锁被占用时会等待,从而避免数据竞争,保证线程安全。
Arc
的作用
Arc
(原子引用计数)用于在多个线程间安全地共享数据。它允许数据在多个线程间传递,并且在引用计数为0时自动释放内存。在代码中,Arc
包装了Mutex
,使得Mutex
可以在多个线程间传递,因为Arc
是线程安全的,满足了多个线程共享数据的需求。