race conditionは、共有状態にアクセスする並行操作の予測できないタイミングに結果が依存するバグです。 典型例は、原子的でないread-modify-write(読み取り・変更・書き込み)です。
仕組み
counter += 1は原子的に見えますが、実際には読み取り・加算・書き込みの3ステップです。2つのスレッドがインターリーブすると、更新が1つ失われることがあります。
text
counter = 0
Thread A: read 0 ─────────── write 1
Thread B: read 0 ─ write 1
Result: 1 (should be 2 — one increment lost)
例
python
counter =
():
counter
_ ():
counter +=
