Wyścig to błąd, w którym wynik zależy od nieprzewidywalnego rozkładu w czasie współbieżnych operacji odwołujących się do współdzielonego stanu. Klasycznym przypadkiem jest niatomowy odczyt-modyfikacja-zapis.
Jak to działa
counter += 1 wygląda na atomowe, ale w rzeczywistości to trzy kroki: odczyt, dodanie, zapis. Dwa wątki mogą się przepleść tak, że jedna aktualizacja zostanie zgubiona.
counter = 0
Thread A: read 0 ─────────── write 1
Thread B: read 0 ─ write 1
Result: 1 (should be 2 — one increment lost)
