You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在无原子操作的情况下直接读取std::atomic_int64_t的值?

解决方案

在单线程写入且无并发写入的场景下,你可以安全地读取std::atomic_int64_t的底层值,无需额外的原子同步指令。以下是两种可行的实现方式:

方式一:使用宽松内存序的原子加载(推荐)

这是符合C++标准的最优方案。std::memory_order_relaxed会让编译器生成最轻量化的读取指令(通常就是普通内存读取,无内存屏障),既满足你“不使用额外原子指令”的需求,又避免了未定义行为。示例代码:

std::atomic_int64_t val;

// 写入线程中的读取操作
int64_t read_val = val.load(std::memory_order_relaxed);

方式二:直接访问底层存储(谨慎使用)

如果你想彻底绕过原子操作封装,可通过reinterpret_cast直接读取内存地址。由于写入线程无并发写入,这种访问是安全的,但该方式依赖编译器对std::atomic的内存布局实现(主流编译器如GCC、Clang、MSVC对平凡类型的std::atomic均直接存储值),属于实现定义行为,兼容性不如第一种方式。示例代码:

std::atomic_int64_t val;

// 写入线程中的读取操作
int64_t read_val = *reinterpret_cast<const int64_t*>(&val);

注意:优先选择第一种方案,它兼顾性能与标准合规性,不会引发潜在的兼容性问题。

内容的提问来源于stack exchange,提问作者Jason Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 17:15:17