C++怎么实现累加器

133 阅读1分钟

实现一个累加器(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() 函数向累加器中添加值。最后,打印出累加器的总和。