面试题答案
一键面试- 原子操作类型:
AtomicBool
:适用于需要在多线程间共享一个布尔值并进行原子操作的场景,比如控制多线程程序的全局开关。AtomicI32
:适用于需要在多线程间共享一个32位整数并进行原子操作的场景,例如在多线程环境下的计数器。
- 示例(使用
AtomicI32
实现多线程间共享数据的同步):
use std::sync::{Arc, Mutex};
use std::thread;
use std::sync::atomic::{AtomicI32, Ordering};
fn main() {
let counter = Arc::new(AtomicI32::new(0));
let mut handles = vec![];
for _ in 0..10 {
let counter = Arc::clone(&counter);
let handle = thread::spawn(move || {
for _ in 0..1000 {
counter.fetch_add(1, Ordering::SeqCst);
}
});
handles.push(handle);
}
for handle in handles {
handle.join().unwrap();
}
println!("Final counter value: {}", counter.load(Ordering::SeqCst));
}
在这个示例中,我们创建了一个AtomicI32
类型的计数器counter
,并在10个线程中对其进行fetch_add
原子操作,每个线程执行1000次加法。Ordering::SeqCst
保证了操作的顺序一致性。最后输出最终的计数器值。