C++ / a working model

BOOK / SOURCE & READING RECORD

C++ Concurrency in Action

Anthony Williams

1st edition, 2012, ISBN 9781933988771; additionally inspected 2nd-edition public previews (2019)

READING EVIDENCE / 已读完整正文

C++ Concurrency in Action

完整阅读 2012 年第一版的第 1–10 章、附录 A–D(正文书页 1–486);另读第二版未登录预览的第 1、2 章可见部分,第二版不声称读完。第一版公开 PDF 的网页转换在书页 194 中断,改用私有本地文本继续读至附录 D 结尾;目录和索引不计正文。历史 API 与示例并非 C++20 规范,本文不照搬无锁容器实现。

查看版本、实际阅读范围与原文入口 →

Sources

同步证明比时间猜测可靠

第一版第 2 章 2.1–2.3;第 4 章 4.1;第 5 章 5.2–5.3;第 7 章 7.2;第 10 章 10.2

线程是否结束、状态是否可读、对象是否还活着,是三个不同问题。第一版从线程所有权写到共享状态、条件变量和内存序,提供的共同视角是寻找一条可解释的先后关系,而不是相信机器足够慢或等待足够久。通知本身不保存业务事实,互斥量保护的谓词才保存事实;同样,原子计数的每次更新不可分割,并不自动让多字段协议成立。阅读无锁章节还必须把节点回收与指针更新分别证明,不能以一次成功的比较交换代替对象寿命分析。用于今天的工程时,我优先保留易审查的锁和明确生命周期;只有测量证明瓶颈存在,再讨论拆锁或降低内存序。C++20 的 jthread 缩短了回收线程的样板代码,却没有替我们设计关闭协议。

相关基础课

线程生命周期:thread、jthread 与 stop_token条件变量:谓词、丢失通知与虚假唤醒内存序:relaxed、acquire-release 与 happens-before

原创实践 →