面试题答案
一键面试- 概念说明:
Arc
(Atomically Reference - Counted)是一个线程安全的引用计数智能指针,用于在多个线程间共享数据。Mutex
(Mutual Exclusion)是一种同步原语,用于保证同一时间只有一个线程可以访问其保护的数据,实现线程安全。
- 代码示例:
use std::sync::{Arc, Mutex};
use std::thread;
fn main() {
// 创建一个被Arc和Mutex保护的共享整数变量
let shared_number = Arc::new(Mutex::new(0));
let mut handles = vec![];
for _ in 0..10 {
// 克隆Arc,以便每个线程都有自己的引用
let number = Arc::clone(&shared_number);
let handle = thread::spawn(move || {
// 锁定Mutex以获取对共享变量的可变引用
let mut num = number.lock().unwrap();
*num += 1;
});
handles.push(handle);
}
for handle in handles {
handle.join().unwrap();
}
// 最后打印共享变量的值
println!("Final value: {}", *shared_number.lock().unwrap());
}
在上述代码中:
- 首先创建了一个被
Arc
和Mutex
包裹的整数变量shared_number
。 - 然后通过
for
循环创建了10个线程,每个线程克隆Arc
的引用,然后锁定Mutex
获取共享变量的可变引用,对其进行加1操作。 - 主线程通过
join
等待所有子线程完成,最后打印共享变量的最终值。