Une race condition est un bug où le résultat dépend du timing imprévisible d'opérations concurrentes accédant à un état partagé. Le cas classique est un read-modify-write qui n'est pas atomique.
Comment ça marche
counter += 1 semble atomique mais représente en réalité trois étapes : lire, ajouter, écrire. Deux threads peuvent s'entrelacer de sorte qu'une mise à jour soit perdue.
counter = 0
Thread A: lit 0 ───────────── écrit 1
Thread B: lit 0 ─ écrit 1
Résultat : 1 (devrait être 2 — un incrément perdu)
