Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

第六十四章:程序竞争

TL;DR

  • 多个执行者交错读写共享数据时,结果可能取决于偶然顺序。

正文

  count = count + 1 在机器里至少包括读出、加一、写回。两个线程同时做它,可能都读到 0、都写回 1,最后丢掉一次更新。这种依赖时序而出现的错误叫竞争条件

  问题不在“线程太快”,而在一项逻辑动作被拆成了多步。要修复它,必须让某些片段对其他线程看起来不可插入。

思考题

两个线程各加一次,结果为何可能是 1?

小结

  • 竞争条件来自共享状态和可交错步骤。

思考题答案(仅供参考)

  两者可能先后读到同一个旧值,再覆盖写回相同的新值。

协议

本文采用 CC BY-NC-SA 4.0 协议发布。