实现一个累加器(accumulator)通常涉及到多线程环境下的原子操作,以确保在多个线程同时访问累加器时的数据安全性。在 C++ 中,可以使用 std::atomic 类来实现原子操作,以下是一个简单的累加器的示例:
#include <iostream>
#include <thread>
#include <atomic>
class Accumulator {
private:
std::atomic<int> sum;
public:
Accumulator() : sum(0) {}
void add(int value) {
sum += value; // std::atomic 的操作符重载,实现了原子加法
}
int getSum() const {
return sum.load(); // 使用 load() 函数读取原子变量的值
}
};
// 示例用法
Accumulator accumulator;
void worker() {
for (int i = 0; i < 1000; ++i) {
accumulator.add(i);
}
}
int main() {
std::thread t1(worker);
std::thread t2(worker);
t1.join();
t2.join();
std::cout << "Sum: " << accumulator.getSum() << std::endl;
return 0;
}
在这个示例中,Accumulator 类使用 std::atomic<int> 类型的变量 sum 来保存累加器的值,并使用原子操作 += 来实现累加。add() 函数用于将给定的值累加到累加器中,getSum() 函数用于获取当前累加器的值。在多线程环境下,多个线程调用 add() 函数来累加值,由于使用了原子操作,因此保证了数据的安全性。
在示例的主函数中,创建了两个线程分别执行 worker() 函数,该函数会循环调用 add() 函数向累加器中添加值。最后,打印出累加器的总和。