- 实现思路:
- 使用
std::sync::Arc
来共享计数器的值,因为Arc
是线程安全的引用计数智能指针,允许多个线程持有它。
- 使用
std::sync::atomic::AtomicUsize
来存储计数器的值,AtomicUsize
提供了原子操作方法,能保证多线程环境下对计数器的操作是线程安全的。
- 创建多个线程,每个线程对
AtomicUsize
的值进行原子操作(如增加)。
- 关键代码片段:
use std::sync::{Arc, Mutex};
use std::thread;
use std::sync::atomic::{AtomicUsize, Ordering};
fn main() {
let counter = Arc::new(AtomicUsize::new(0));
let mut handles = vec![];
for _ in 0..10 {
let counter = Arc::clone(&counter);
let handle = thread::spawn(move || {
counter.fetch_add(1, Ordering::SeqCst);
});
handles.push(handle);
}
for handle in handles {
handle.join().unwrap();
}
println!("Final counter value: {}", counter.load(Ordering::SeqCst));
}