ZBLOG

std::atomic 的用法示例?它的 store() 和 exchange() 方法的功能?

std::atomic<> 是 C++11 引入的模板类,用于实现多线程环境下的原子操作。以下是用法示例及 store()exchange() 的功能说明:


1. 基本用法示例

  1. #include <atomic>
  2. #include <iostream>
  3. #include <thread>
  4. std::atomic<int> counter(0); // 原子整型变量
  5. void increment() {
  6. for (int i = 0; i < 1000; ++i) {
  7. counter.fetch_add(1, std::memory_order_relaxed); // 原子递增
  8. }
  9. }
  10. int main() {
  11. std::thread t1(increment);
  12. std::thread t2(increment);
  13. t1.join();
  14. t2.join();
  15. std::cout << "Counter: " << counter.load() << std::endl; // 输出结果
  16. return 0;
  17. }

2. store() 方法

  • 功能:原子地写入值到 atomic 对象。
  • 参数
    • val:要写入的值。
    • order:内存顺序(默认为 std::memory_order_seq_cst)。
  • 示例
  1. std::atomic<bool> flag(false);
  2. flag.store(true, std::memory_order_release); // 原子写入 true

3. exchange() 方法

  • 功能:原子地交换值,并返回旧值。
  • 参数
    • val:要设置的新值。
    • order:内存顺序(默认为 std::memory_order_seq_cst)。
  • 示例
  1. std::atomic<int> value(10);
  2. int old_value = value.exchange(20); // value=20,返回旧值10

4. 关键区别

方法 功能 返回值
store() 仅更新值,不返回旧值 void
exchange() 更新值并返回旧值 T(旧值)

5. 内存顺序选项

  • std::memory_order_relaxed:无同步或顺序约束(仅保证原子性)。
  • std::memory_order_release/acquire:实现线程间同步。
  • std::memory_order_seq_cst(默认):全局严格顺序。

通过合理使用这些方法,可以避免多线程竞争问题,确保数据操作的原子性和可见性。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?