知识卡片

const也要线程安全

普通读书笔记卡 · 1409

内容

const 成员函数仍可能更新 mutable 缓存或计数器;若对象会被并发访问,逻辑只读不代表实现无数据竞争。单个独立状态可考虑原子量,多个状态必须共同一致时通常需要互斥保护,不能把每个字段原子化就当作整体安全。

参考来源

- 位置:《Effective Modern C++》第3章《移步现代C++》,条款十六:让 const 成员函数线程安全(源文件:_epub-src/EPUB/text/ch004.xhtml) - 结论依据:原文要求并发上下文中的 const 成员安全,限定单个原子变量不能替代多状态一致性。 - 原始内容:确保 const 成员函数线程安全,除非你 确定 它们永远不会在并发上下文( concurrent context )中使用。 使用 std::atomic 变量可能比互斥量提供更好的性能,但是它只适合操作单个变量或内存位置。