Skip to content

卷五练习体系

卷五的练习分为三层,从易到难、从局部到系统。

第一层是文章内小练习,附在每篇正文末尾,用于验证单个知识点——比如 data race 的识别、condition_variable 的谓词等待、atomic 的 memory order 选择。每道练习 10–20 分钟即可完成,不需要搭建额外工程。

第二层是章节大作业(Lab),即本页列出的 8 个 Lab。每个 Lab 是一个可运行的小系统,拆成 3–5 个 milestone,每个 milestone 都有明确接口、Catch2 测试和验收标准。学习者完成后应该得到一个可以复用的并发组件,而不是零散 demo。

第三层是卷末综合项目(Capstone),把前面所有 Lab 的组件串起来,形成一个 mini concurrent runtime。

Lab 一览

Lab项目名称覆盖章节建议时长难度前置 Lab
Lab 0Thread Lifecyclech00–ch014–6hintermediate
Lab 1Bounded Queue & Sync Primitivesch02–ch048–12hintermediateLab 0
Lab 2Atomic Metrics & SPSC Ring Bufferch03–ch046–8hintermediateLab 0
Lab 2.5Concurrency Debuggingch083–4hintermediateLab 0–2
Lab 3Production-style Thread Poolch0510–14hadvancedLab 0–1
Lab 4Coroutine Scheduler & Event Loopch0612–16hadvancedLab 3
Lab 5Channel or Actor Runtimech078–12hadvancedLab 1, 4
CapstoneMini Concurrent Runtimech08–ch098–12hadvancedLab 0–5

最低要求完成 Lab 0、Lab 1、Lab 3 和 Capstone(约 30–45 小时),即可覆盖卷五最核心的能力曲线。完整完成全部 Lab 约需 60–85 小时。

Lab 依赖关系

cpp
Lab 0 (joining_thread / thread_guard)

  ├─→ Lab 1 (BoundedBlockingQueue, ConcurrentCache)
  │     │
  │     ├─→ Lab 2 (SpscRingBuffer)        ─ 独立实现,不依赖 Lab 1
  │     │
  │     ├─→ Lab 2.5 (Debugging Lab)        ─ 复用 Lab 02 的代码作为诊断素材
  │     │
  │     └─→ Lab 3 (ThreadPool)             ─ 复用 Lab 1 的 BoundedBlockingQueue
  │           │
  │           ├─→ Lab 4 (Coroutine Scheduler) ─ 关闭语义参考 Lab 3
  │           │     │
  │           │     └─→ Lab 5 (Channel/Actor) ─ 可复用 Lab 1 的队列
  │           │
  │           └─→ Capstone (Mini Runtime)   ─ 组合 Lab 05 的组件

环境准备

所有 Lab 共用以下环境要求:

  • 编译器:GCC 12+ 或 Clang 15+(C++20,完整协程支持)
  • CMake:3.14+
  • 测试框架:Catch2 v3(header-only,通过 FetchContent 拉取)
  • TSan:编译选项 -fsanitize=thread -g
  • 平台:Linux 或 WSL2(Lab 4 的 epoll 部分需要)
  • Valgrind(可选,Lab 2.5 的 helgrind 需要)

每个 Lab 文章的开头都有具体的 CMakeLists.txt 模板,可以直接使用。

v0.7.0-9-g940ec1b · 940ec1b · 2026-07-05