跳到正文

第10章学习笔记:并发、原子性与内存顺序

课程笔记

沿程序真实运行路径学习并发、原子性与内存顺序,始终区分抽象接口、实现状态和可观测证据。

关联:章节 第10章 并发、原子性与内存顺序

第10章笔记:并发、原子性与内存顺序

本章要解决的问题

沿程序真实运行路径学习并发、原子性与内存顺序,始终区分抽象接口、实现状态和可观测证据。 本章七课是一条连续推理链,不是七个标题。先确定上一课输出怎样成为下一课输入,再记录对象、事件、状态和证据。

七课连接

  • 线程与共享状态:关系 interleaving\ of\ events;练习为为《线程与共享状态》构造一条最短可运行轨迹,逐步记录输入状态、系统动作和输出状态,并用关系 interleaving\ of\ events 复算关键量;边界为不能把《线程与共享状态》在语言、ABI、ISA、微体系结构、内核或设备层的对象混成一个‘系统自动完成’,必须声明位宽、权限、时序和失败后的可见状态;连接说明:承接前一课的状态或契约;本节结果会进入《竞态与临界区》。
  • 竞态与临界区:关系 atomic\ region;练习为为《竞态与临界区》构造一条最短可运行轨迹,逐步记录输入状态、系统动作和输出状态,并用关系 atomic\ region 复算关键量;边界为不能把《竞态与临界区》在语言、ABI、ISA、微体系结构、内核或设备层的对象混成一个‘系统自动完成’,必须声明位宽、权限、时序和失败后的可见状态;连接说明:承接前一课的状态或契约;本节结果会进入《锁、条件变量与信号量》。
  • 锁、条件变量与信号量:关系 wait(predicate);练习为为《锁、条件变量与信号量》构造一条最短可运行轨迹,逐步记录输入状态、系统动作和输出状态,并用关系 wait(predicate) 复算关键量;边界为不能把《锁、条件变量与信号量》在语言、ABI、ISA、微体系结构、内核或设备层的对象混成一个‘系统自动完成’,必须声明位宽、权限、时序和失败后的可见状态;连接说明:承接前一课的状态或契约;本节结果会进入《原子读改写》。
  • 原子读改写:关系 CAS(old,new);练习为为《原子读改写》构造一条最短可运行轨迹,逐步记录输入状态、系统动作和输出状态,并用关系 CAS(old,new) 复算关键量;边界为不能把《原子读改写》在语言、ABI、ISA、微体系结构、内核或设备层的对象混成一个‘系统自动完成’,必须声明位宽、权限、时序和失败后的可见状态;连接说明:承接前一课的状态或契约;本节结果会进入《死锁条件与规避》。
  • 死锁条件与规避:关系 mutual\ exclusion+hold+no\ preempt+cycle;练习为为《死锁条件与规避》构造一条最短可运行轨迹,逐步记录输入状态、系统动作和输出状态,并用关系 mutual\ exclusion+hold+no\ preempt+cycle 复算关键量;边界为不能把《死锁条件与规避》在语言、ABI、ISA、微体系结构、内核或设备层的对象混成一个‘系统自动完成’,必须声明位宽、权限、时序和失败后的可见状态;连接说明:承接前一课的状态或契约;本节结果会进入《内存模型与屏障》。
  • 内存模型与屏障:关系 happens-before;练习为为《内存模型与屏障》构造一条最短可运行轨迹,逐步记录输入状态、系统动作和输出状态,并用关系 happens-before 复算关键量;边界为不能把《内存模型与屏障》在语言、ABI、ISA、微体系结构、内核或设备层的对象混成一个‘系统自动完成’,必须声明位宽、权限、时序和失败后的可见状态;连接说明:承接前一课的状态或契约;本节结果会进入《并发调度模型实验》。
  • 并发调度模型实验:关系 schedule\to observable\ state;练习为为《并发调度模型实验》构造一条最短可运行轨迹,逐步记录输入状态、系统动作和输出状态,并用关系 schedule\to observable\ state 复算关键量;边界为不能把《并发调度模型实验》在语言、ABI、ISA、微体系结构、内核或设备层的对象混成一个‘系统自动完成’,必须声明位宽、权限、时序和失败后的可见状态;连接说明:承接前一课的状态或契约;本节结果会进入《字节怎样进入socket》。

章内学习法

先闭卷画一条最短执行轨迹,再为每个箭头标主体和所属层;随后逐式复算,运行本章代码实验四组测试,并增加一个越界、权限、冲突、乱序或故障输入。只要实际值与模型不同,就保存首个偏差,不用后续噪声替代根因。

错题与复习

把错误归入分层混淆、位宽/单位、状态跳步、事件顺序、权限遗漏、并发交错、故障恢复或观察窗八类。一周后更换参数重做阶段卷;能向同学从现象讲到机制、公式、实验和边界,才算学会。