跳到正文

无锁结构

实测:手工排出交错的 ABA 演示里,A 的 CAS 返回"成功"并把早已弹走的节点接回链表;4 线程随机对拍 30 万步,无锁栈重复取走 0 个(结构正确)却比有锁栈慢 2.07 倍(58.5ms vs 28.3ms),而单线程无竞争时它反而快 1.45 倍(12.59 vs 18.25 ns/次)。

并发设计模式

实测:std::async 每次派生 53.3 微秒,500 个 0.1ms 任务不 get 只靠 future 析构就花 110.3ms(等于串行);launch::deferred 的任务在 get 之前一次都没执行;actor 邮箱逐条投递 0.091µs/条、攒 1000 条一批投 0.023µs/条;COW 快照要读段长到 800 次累加才反超 mutex(1.70x)。

同步工具族

实测:MinGW 上 shared_mutex 无竞争单价是 std::mutex 的 5–5.7 倍,8 线程纯读时反而慢 9 倍,读临界区长到 1600 次累加才追平;自旋锁无竞争比 mutex 快 45%,多来 4 个可运行线程就反过来慢 3.6 倍;call_once 已完成路径只要 3.11 纳秒。

类与封装

空类为什么占 1 字节、成员按声明顺序构造而不是初始化列表顺序、移动构造少写一个 noexcept 就让 vector 扩容多拷一千次——类的骨架规则一次讲清。

5 分钟阅读 C++ 语言 · 类与封装 C++ 类 RAII