ZBLOG

std::atomic atomic_int = 0;

在 C++ 中,使用 std::atomic<int> 来定义一个原子整数时,你不能直接将其初始化为普通整数(如 0),因为这样会导致编译错误。正确的初始化方式是通过构造函数或使用 store 方法。

正确的初始化方式

  1. 使用构造函数
#include <atomic>

std::atomic<int> atomic_int(0); // 使用构造函数初始化
  1. 先声明,再赋值

如果你已经声明了一个 std::atomic<int> 变量,可以后续使用 store 方法来设置初始值:

#include <atomic>

std::atomic<int> atomic_int; // 声明但未初始化
atomic_int.store(0);         // 使用 store() 方法进行初始化

示例代码

下面是一个简单的示例,展示如何正确地定义和使用 std::atomic<int>:

#include <iostream>
#include <thread>
#include <vector>
#include <atomic>

std::atomic<int> atomic_int(0); // 正确的初始化方式

void increment(int times) {
    for (int i = 0; i < times; ++i) {
        atomic_int.fetch_add(1); // 安全递增计数器
    }
}

int main() {
    const int numThreads = 10;
    const int incrementsPerThread = 1000;

    std::vector<std::thread> threads;

    // 启动多个线程来增加计数器
    for (int i = 0; i < numThreads; ++i) {
        threads.emplace_back(increment, incrementsPerThread);
    }

    // 等待所有线程完成工作
    for (auto& t : threads) {
        t.join();
    }

    std::cout << "Final counter value: " << atomic_int.load() << std::endl;

    return 0;
}

在这个例子中,我们创建了一个原子整数 atomic_int,并让多个线程同时对它进行递增操作。最终输出保证是线程安全的,因为我们使用了 std::atomic 来处理共享数据。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=20584

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?