Critical-Section
定义
当多个 CPU (或线程) 同时访问共享内存,且至少有一个是写操作时,最终的结果取决于指令执行的精确时序。这种不确定性称为竞态条件。
本质
高级语言的一行代码 (如 count++) 在汇编层对应 Load → Modify → Store 三步。
如果两个 CPU 交错执行:
- CPU A Load (val=0)
- CPU B Load (val=0)
- CPU A Store (val=1)
- CPU B Store (val=1) 结果: 内存是 1,而不是 2。A 的更新丢失了 (Lost Update)。
安全视角
TOCTOU (Time-of-check to time-of-use): 攻击者在系统检查权限 (Check) 和使用资源 (Use) 的极短时间窗口内,修改了资源状态。这就是一种竞态漏洞。