Un race condition este un bug în care rezultatul depinde de temporizarea impredictibilă a operațiilor concurente care accesează o stare partajată. Cazul clasic este un read-modify-write care nu este atomic.
Cum funcționează
counter += 1 pare atomic, dar sunt de fapt trei pași: read, add, write. Două thread-uri se pot întrepătrunde astfel încât o actualizare să se piardă.
counter = 0
Thread A: read 0 ─────────── write 1
Thread B: read 0 ─ write 1
Rezultat: 1 (ar trebui să fie 2 — un increment pierdut)
