Eine Race Condition ist ein Fehler, bei dem das Ergebnis vom unvorhersehbaren Timing gleichzeitiger Operationen abhängt, die auf gemeinsamen Zustand zugreifen. Der klassische Fall ist ein Read-Modify-Write, der nicht atomar ist.
So funktioniert es
counter += 1 sieht atomar aus, ist aber tatsächlich drei Schritte: lesen, addieren, schreiben. Zwei Threads können sich so verschränken, dass ein Update verloren geht.
counter = 0
Thread A: read 0 ─────────── write 1
Thread B: read 0 ─ write 1
Result: 1 (should be 2 — one increment lost)
