面试题答案
一键面试-
基本步骤:
- 引入必要的包:在Rust中,使用
std::sync::{Arc, Mutex}
来引入Arc
和Mutex
。 - 创建共享数据:将需要共享的数据用
Mutex
包裹,再用Arc
进行原子引用计数包装,这样数据可以在多个线程间安全共享。 - 创建线程:使用
std::thread::spawn
创建线程,并将Arc<Mutex<T>>
类型的共享数据传递给线程。 - 在线程中操作共享数据:获取
Mutex
的锁(lock
方法),如果获取成功,就可以对共享数据进行读写操作,操作完成后释放锁。
- 引入必要的包:在Rust中,使用
-
示例代码:
use std::sync::{Arc, Mutex};
use std::thread;
fn main() {
// 创建共享数据,用Mutex包裹,再用Arc包装
let shared_data = Arc::new(Mutex::new(0));
let mut handles = vec![];
for _ in 0..2 {
// 克隆Arc,每个线程都有自己的引用
let data = Arc::clone(&shared_data);
let handle = thread::spawn(move || {
// 获取锁
let mut num = data.lock().unwrap();
// 对共享数据进行读写操作
*num += 1;
println!("Thread updated data to: {}", *num);
});
handles.push(handle);
}
for handle in handles {
handle.join().unwrap();
}
}