内存序与验证
这一部分放在 utils、epoch、deque、channel 之前,是因为后面每一章都有一个「Ordering」小节,回答同一个问题:这对 Release / Acquire(或这个 SeqCst fence)在和谁配对、防的是哪种重排。答案的分类在这里先定好。
- 本库里的内存序:五类用法,各 crate 的计数表,和 tokio 卷的对照;x86 上用
lock cmpxchg代替mfence的那段「HACK」,ARM 上的load_consume。 - 怎么验证并发代码: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 与提升各有一个具体的例子。
💬 关联讨论
发起讨论加载中...