Состояние гонки — это баг, при котором результат зависит от непредсказуемого тайминга конкурентных операций, обращающихся к общему состоянию. Классический случай — read-modify-write, который не атомарен.
Как это работает
counter += 1 выглядит атомарным, но на самом деле это три шага: чтение, сложение, запись. Два потока могут чередоваться так, что одно обновление теряется.
counter = 0
Поток A: читает 0 ─────────── пишет 1
Поток B: читает 0 ─ пишет 1
Результат: 1 (должно быть 2 — один инкремент потерян)
