← 完整学习路线

UNIT 47 / 78 · W06-5

用固定分区验证主项目线程生命周期

本单元预计 6 核心小时。可以分成多个学习时段,按完整小节推进;停下来时留下输入、命令、结果和下一步。

时间包含阅读、编码与检查,是学习预算而非期限。打开此页只保存阅读位置,不代表通过验收。

01 / READ

先知道自己在观察什么

线程、互斥锁与死锁 →

把逐次共享累加改成局部累加后一次合并,明确最后一次读取与join。

条件变量、有界队列与关闭协议 →

复盘关闭在join之前的原因,队列只作为短练习。

原子操作与 happens-before →

对照原子计数与发布,不为求和强行引入更弱顺序。

TCP 字节流、分包、超时与背压 →

读完整loopback代码时按fd建立、连接完成、发送偏移、读取EOF四段标注。

先备不清楚时,沿章节入口补读;不要依赖翻过页数判断进度。

02 / PREDICT & RUN

先留下自己的预测或独立尝试

先解释自转账与双向转账保持的总额,再运行;不把余额快照拆成两次无关读取。

双向转账保持总额 →
源码下载与编译入口

下载到自己的练习目录。按本节给出的完整命令编译;多文件与driver要求见原任务。需要时查阅文件保存与编译操作 →

21-b.cpp

先保存预测,再核对正文标明的预期或诊断。完整构建、多文件与设备实验按原任务命令执行。

03 / CHANGE ONE THING

通过一个变动看清原因

在副本增加自转账用例并记录前后两余额,保留双向正常与创建失败回归。

修改后应观察到什么

自转账不改变任何余额,总额仍4000;无重复获取同一非递归mutex。

04 / DO IT YOURSELF

换一组条件,独立解决

在同一Reduction Lab学习目录建立固定8项、2个任务的受控原型:显式范围[0,4)、[4,8),各写独立partial,join后合并;通用分区留到下一周。

用这些条件检查自己的实现

  • 输入1到8得到局部10、26,总和36;全零输入结果0。
  • 所有partial预先存在,借用数据活到join后;未通过通用worker测试前不宣布并行接口完成。
05 / EXPLAIN & CHECK

用证据决定是否进入下一单元

  1. 为什么局部结果槽位不同仍需等待线程完成后读取?
  2. 若创建第二个线程失败,哪个对象负责等第一个?

本单元的验收依据

固定分区原型与生命周期图通过,保留未完成的通用分区任务;同一主项目继续,队列/TCP不扩成额外项目。

留下自己的代码或推演、测试输入、真实输出和仍不确定的问题。未达到要求时,下一次继续本单元。