竞态条件(Race Condition)
缩写:无
简述
结果依赖于不可控的时序或交错,导致偶发错误的缺陷类别。共享可变状态无同步是主因;表象为「有时才失败」,难复现。
使用场景
多线程写共享、异步读写同一资源、check-then-act。
组成与要点
线程1: 读 x == 0
线程2: 读 x == 0
线程1: 写 x = 1
线程2: 写 x = 1 // check-then-act 交错
实践与应用
• 缩小临界区
• 用原子操作或不可变
• 压力与交织测试
注意事项
• 误以为「概率低」可忽略
• 日志本身改变时序掩盖问题
关联术语
• 并发:竞态出现的背景
• 同步与锁:消除数据竞争的手段之一
• 原子性:不可分割的操作粒度
• 不可变:减少共享可变从而降低竞态