ZBLOG

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

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


1. 基本用法示例

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

std::atomic<int> counter(0); // 原子整型变量

void increment() {
    for (int i = 0; i < 1000; ++i) {
        counter.fetch_add(1, std::memory_order_relaxed); // 原子递增
    }
}

int main() {
    std::thread t1(increment);
    std::thread t2(increment);
    
    t1.join();
    t2.join();
    
    std::cout << "Counter: " << counter.load() << std::endl; // 输出结果
    return 0;
}

2. store() 方法

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

3. exchange() 方法

  • 功能:原子地交换值,并返回旧值。
  • 参数
    • val:要设置的新值。
    • order:内存顺序(默认为 std::memory_order_seq_cst)。
  • 示例
std::atomic<int> value(10);
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

注册

已经有帐号?