Skip to content

[feat / help wanted, enhaucement]: 内存序happens-before的可视化优化 #55

@Charliechen114514

Description

@Charliechen114514

背景

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」正文

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationfeaturefeature, which enhaucement is using in improvement no matter it is bug fix or anythong else :)good first issueGood for newcomers
    No fields configured for Feature.

    Projects

    Status
    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions