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

多线程访问std::atomic:能否同时操作?操作粒度有多细?

关于std::atomic多线程读写的问题解答

首先看你的代码示例:

std::atomic<int> counter = 0;

void fn()
{
    while(true)
    {
        ++counter;

        if(counter > 1000)
            break;
    }
}

针对你的问题解答如下:

  • 线程2是否需要等待线程1完成递增后才能读取counter?
    ++counter是一个原子写操作,if (counter > 1000)里的读取是原子读操作。原子操作的核心特性是“不可分割性”——硬件会保证写操作要么完全执行完毕,要么完全没执行,不存在中间状态。线程2不需要主动等待线程1的递增完成,但这两个原子操作不会同时执行:线程2的读操作要么读到线程1递增前的旧值,要么读到递增后的新值,绝不会读到半修改的中间值。
  • 两个线程同时读取counter时,能否同时进行?
    可以同时读取。原子读操作在硬件层面是支持并发的,多个线程的读操作不需要互相锁定或等待。它们可以同时获取counter的当前值,不会出现数据竞争或读取错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 16:52:34