第六十四章:程序竞争
TL;DR
- 多个执行者交错读写共享数据时,结果可能取决于偶然顺序。
正文
count = count + 1 在机器里至少包括读出、加一、写回。两个线程同时做它,可能都读到 0、都写回 1,最后丢掉一次更新。这种依赖时序而出现的错误叫竞争条件。
问题不在“线程太快”,而在一项逻辑动作被拆成了多步。要修复它,必须让某些片段对其他线程看起来不可插入。
思考题
两个线程各加一次,结果为何可能是 1?
小结
- 竞争条件来自共享状态和可交错步骤。
思考题答案(仅供参考)
两者可能先后读到同一个旧值,再覆盖写回相同的新值。
协议
本文采用 CC BY-NC-SA 4.0 协议发布。