Rust in Everything
基于 crossbeam 0.8.5

内存序与验证

这一部分放在 utils、epoch、deque、channel 之前,是因为后面每一章都有一个「Ordering」小节,回答同一个问题:这对 Release / Acquire(或这个 SeqCst fence)在和谁配对、防的是哪种重排。答案的分类在这里先定好。

  1. 本库里的内存序:五类用法,各 crate 的计数表,和 tokio 卷的对照;x86 上用 lock cmpxchg 代替 mfence 的那段「HACK」,ARM 上的 load_consume。
  2. 怎么验证并发代码:CI 的 9 个 job;loom 为什么只覆盖 epoch;Miri 对 deque 关掉抢占的原因;crossbeam_sanitize 和 crossbeam_sanitize_thread 两个 cfg 改写了哪些代码;TSan 抑制文件里的四行。
flowchart LR
  ord["本库里的内存序:为什么这么选"] --> test["怎么验证:用什么工具检查这些选择"]
  test --> utils["03 utils"]
  test --> epoch["04 epoch"]
  test --> deque["05 deque"]

前置知识:知道 Relaxed、Acquire、Release、AcqRel、SeqCst 各是什么意思,见过「Release 写和 Acquire 读配对」的例子。还不熟的话,tokio 本地队列和 bytes 的 clone 与提升各有一个具体的例子。

💬 关联讨论

发起讨论
加载中...