Quando più thread condividono dati, le loro operazioni possono intercalarsi (interleave) nel mezzo di un aggiornamento a più passi, producendo una race condition — un bug in cui il risultato dipende da un timing imprevedibile. La sincronizzazione è l'insieme di strumenti che impongono un ordinamento sicuro.
Il problema: una race condition
sembra atomico ma in realtà è read-modify-write:
