Una race condition è un bug in cui il risultato dipende dalla tempistica imprevedibile di operazioni concorrenti che accedono a uno stato condiviso. Il caso classico è un read-modify-write che non è atomico.
Come funziona
counter += 1 sembra atomico ma in realtà sono tre passi: leggi, somma, scrivi. Due thread possono intrecciarsi in modo che un aggiornamento venga perso.
counter = 0
Thread A: legge 0 ─────────── scrive 1
Thread B: legge 0 ─ scrive 1
Risultato: 1 (dovrebbe essere 2 — un incremento perso)
