知识卡片
const也要线程安全
内容
const 成员函数仍可能更新 mutable 缓存或计数器;若对象会被并发访问,逻辑只读不代表实现无数据竞争。单个独立状态可考虑原子量,多个状态必须共同一致时通常需要互斥保护,不能把每个字段原子化就当作整体安全。
参考来源
- 位置:《Effective Modern C++》第3章《移步现代C++》,条款十六:让 const 成员函数线程安全(源文件:_epub-src/EPUB/text/ch004.xhtml)
- 结论依据:原文要求并发上下文中的 const 成员安全,限定单个原子变量不能替代多状态一致性。
- 原始内容:确保 const 成员函数线程安全,除非你 确定 它们永远不会在并发上下文( concurrent context )中使用。 使用 std::atomic 变量可能比互斥量提供更好的性能,但是它只适合操作单个变量或内存位置。