知识卡片
原子不等于易变
内容
atomic 提供并发访问所需的原子操作与内存顺序语义;volatile 用于不应被优化掉的特殊内存访问,本身不提供线程同步。两者可能有不同需求,不能互相替代。多个原子操作组合也不自动成为原子事务,应按协议检查整体一致性。
参考来源
- 位置:《Effective Modern C++》第7章《并发API》,条款四十:对于并发使用 std::atomic ,对于特殊内存使用 volatile(源文件:_epub-src/EPUB/text/ch008.xhtml)
- 结论依据:原文分别解释atomic的并发语义与volatile的特殊内存语义,不能互作替代。
- 原始内容:std::atomic 用于在不使用互斥锁情况下,来使变量被多个线程访问的情况。是用来编写并发程序的一个工具。 volatile 用在读取和写入不应被优化掉的内存上。是用来处理特殊内存的一个工具。