ZBLOG

std::atomic atomic_int = 0;

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

正确的初始化方式

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

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

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

示例代码

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

  1. #include <iostream>
  2. #include <thread>
  3. #include <vector>
  4. #include <atomic>
  5. std::atomic<int> atomic_int(0); // 正确的初始化方式
  6. void increment(int times) {
  7. for (int i = 0; i < times; ++i) {
  8. atomic_int.fetch_add(1); // 安全递增计数器
  9. }
  10. }
  11. int main() {
  12. const int numThreads = 10;
  13. const int incrementsPerThread = 1000;
  14. std::vector<std::thread> threads;
  15. // 启动多个线程来增加计数器
  16. for (int i = 0; i < numThreads; ++i) {
  17. threads.emplace_back(increment, incrementsPerThread);
  18. }
  19. // 等待所有线程完成工作
  20. for (auto& t : threads) {
  21. t.join();
  22. }
  23. std::cout << "Final counter value: " << atomic_int.load() << std::endl;
  24. return 0;
  25. }

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


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?