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

原子类型能否赋值另一个原子变量?store跨对象操作是否原子?

关于C++原子类型store操作原子性的疑问解答

首先明确两个核心问题:

  • 为什么i1 = i2会报错?因为C++的原子类型默认禁用了拷贝赋值和拷贝构造函数,这是语法层面的限制,和操作是否原子无关。
  • i1.store(i2)的本质是什么?它并非一个单一的原子操作,而是拆成了两步独立的原子操作:
    1. 原子地读取i2的当前值(等价于隐式调用i2.load());
    2. 原子地将读取到的值写入i1(这是store方法本身的原子操作)。

这意味着整个i1.store(i2)的过程不具备整体原子性——两步操作之间可能被其他线程打断。比如若有其他线程在读取i2和写入i1的间隙修改了i2的值,那么i1最终存储的将不是调用store时i2的原始值。

《C++ Concurrency in Action》中提到的“针对两个不同对象的单个操作无法是原子的”完全正确,因为没有硬件指令能直接原子完成跨两个对象的读写操作,所有涉及多对象的操作都只能拆分为多个单对象原子操作的组合,而组合后的整体不具备原子性。

内容的提问来源于stack exchange,提问作者x f

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:03:36