实现思路
- 使用
std::sync::atomic::AtomicUsize
类型来存储计数器的值,因为 AtomicUsize
提供了原子操作,能在多线程环境下安全地修改和读取。
- 提供方法来增加、减少和获取计数器的值,这些方法要使用
AtomicUsize
提供的原子操作方法。
- 在多线程环境下,每个线程通过这些方法来操作计数器,从而保证数据的准确性。
关键代码片段
use std::sync::atomic::{AtomicUsize, Ordering};
use std::thread;
struct Counter {
value: AtomicUsize,
}
impl Counter {
fn new() -> Self {
Counter {
value: AtomicUsize::new(0),
}
}
fn increment(&self) {
self.value.fetch_add(1, Ordering::SeqCst);
}
fn decrement(&self) {
self.value.fetch_sub(1, Ordering::SeqCst);
}
fn get(&self) -> usize {
self.value.load(Ordering::SeqCst)
}
}
fn main() {
let counter = Counter::new();
let mut handles = vec![];
for _ in 0..10 {
let counter_clone = counter.clone();
let handle = thread::spawn(move || {
counter_clone.increment();
});
handles.push(handle);
}
for handle in handles {
handle.join().unwrap();
}
println!("Final counter value: {}", counter.get());
}