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

固定大小的std::vector<std::atomic_bool>元素操作是否线程安全?

结论

这个操作是线程安全的,不会产生数据竞争或未定义行为。

原因说明

  • 首先,std::vector的operator[]操作本身不会修改vector的内部元数据(比如大小、容量、底层内存指针),题目已经明确说明vector创建后不会修改大小,也就不会触发扩容、元素移动/销毁这类会改变内存布局的操作。这种前提下,多线程不管是访问同一个下标还是不同下标的vector元素,调用operator[]本身都不会有线程安全问题,返回的元素引用是稳定有效的。
  • 其次,std::atomic_bool的compare_exchange_strong是C++标准规定的原子操作,本身就是线程安全的:哪怕多个线程同时操作同一个std::atomic_bool实例,这个操作也会以原子方式执行,只会按照内存序的规定产生符合预期的结果,不会出现数据竞争。

补充说明

如果有其他线程同时对下标为2的这个atomic_bool变量做写入操作,本次compare_exchange_strong的执行结果可能成功也可能失败,但这是原子操作的正常语义,不属于线程安全问题,也不会产生未定义行为。
只有当你在执行这个操作的同时,有其他线程修改vector的大小(比如调用resize、push_back、erase等方法),才可能触发未定义行为,但题目已经排除了这种情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:00:05