背景
documents/vol5-concurrency/ch03-atomic-memory-model/02-memory-ordering.md 的「## memory_order_acquire 与 memory_order_release:同步的黄金搭档」一节,用文字描述了 release/acquire 配对,并在「### synchronizes-with 与 happens-before」「### message passing 模式」两小节给出了完整推导:Producer 写 data=42(非原子)→ ready.store(true, release);Consumer ready.load(acquire) 读到 true 后读 data,必然看到 42。
但全节只有文字与代码,没有一张图。happens-before 的传递性(sequenced-before + synchronizes-with + sequenced-before)是整篇内存序、乃至整个并发卷最难凭文字建立直觉的概念,读者要在脑子里拼出「为什么 consumer 读到 ready==true 就一定能看到 data==42」这条可见性链。
可能需要做什么?
在「### synchronizes-with 与 happens-before」小节末尾(或紧随 message passing 代码块之后)插入一个 ````mermaid` 代码块。
建议图类型:sequenceDiagram,两个参与者 Producer 线程、Consumer 线程(也可加一个 ready / data 的 Note)。我目前想到的图可能是这样的:
- Producer:
data=42(非原子写,标 sequenced-before)→ ready.store(true, release)
- Consumer:
ready.load(acquire) 读到 true → 读 data(标 sequenced-before)
- 用虚线箭头从 release-store 指向 acquire-load,标注
synchronizes-with;再标出两段 sequenced-before,最终拼出 data=42 happens-before 读 data。
可在「### message passing 模式」代码块后再放一张更精简的对照版本(可选)。
验收标准
pnpm dev 后该 mermaid 块在网页上正确渲染为时序图;
- 图中事件值与正文一致(
data=42、release/acquire 标注);
- 不改动任何代码块与正文技术断言,纯增量插入。
一些您可能需要的帮助:
- 全仓已启用 mermaid 渲染(30+ 文件在用),````mermaid` 即可。
- 图中所有事实(哪些操作、什么内存序、先后顺序)正文已逐句写明,本任务只是把文字翻译成 mermaid,不引入任何新主张。当然,如果有错,单独拉Issue摇我审查确认
- 单文件、单图
参考资料(如果还有,欢迎comment补充!)
- cppreference:
std::memory_order
- 本系列「## synchronizes-with 与 happens-before」正文
背景
documents/vol5-concurrency/ch03-atomic-memory-model/02-memory-ordering.md的「## memory_order_acquire 与 memory_order_release:同步的黄金搭档」一节,用文字描述了 release/acquire 配对,并在「### synchronizes-with 与 happens-before」「### message passing 模式」两小节给出了完整推导:Producer 写data=42(非原子)→ready.store(true, release);Consumerready.load(acquire)读到 true 后读data,必然看到 42。但全节只有文字与代码,没有一张图。happens-before 的传递性(sequenced-before + synchronizes-with + sequenced-before)是整篇内存序、乃至整个并发卷最难凭文字建立直觉的概念,读者要在脑子里拼出「为什么 consumer 读到 ready==true 就一定能看到 data==42」这条可见性链。
可能需要做什么?
在「### synchronizes-with 与 happens-before」小节末尾(或紧随 message passing 代码块之后)插入一个 ````mermaid` 代码块。
建议图类型:sequenceDiagram,两个参与者
Producer线程、Consumer线程(也可加一个ready / data的 Note)。我目前想到的图可能是这样的:data=42(非原子写,标 sequenced-before)→ready.store(true, release)ready.load(acquire)读到 true → 读data(标 sequenced-before)synchronizes-with;再标出两段 sequenced-before,最终拼出data=42 happens-before 读 data。可在「### message passing 模式」代码块后再放一张更精简的对照版本(可选)。
验收标准
pnpm dev后该 mermaid 块在网页上正确渲染为时序图;data=42、release/acquire 标注);一些您可能需要的帮助:
参考资料(如果还有,欢迎comment补充!)
std::memory_order