Definition
Ein Nebenläufigkeitsfehler, bei dem das Programmverhalten oder Ergebnis von der relativen zeitlichen Abfolge oder Ordnung von Operationen auf gemeinsam genutzten Ressourcen abhängt, sodass unterschiedliche Interleavings unterschiedliche, teils falsche oder unsichere Ergebnisse produzieren.

Prinzip

Prinzip
Wenn mehrere konkurrierende Akteure (Threads, Prozesse, Interrupts) auf gemeinsamen Zustand zugreifen und mindestens einer ihn ohne geeignete Synchronisation verändert, führt die fehlende definierte Ordnung zu Nichtdeterminismus, der empfindlich auf Scheduler‑Timing, Caches oder I/O reagiert.

Demonstration

Demonstration
Zwei Threads erhöhen einen gemeinsamen Zähler durch Lesen, Inkrementieren und Zurückschreiben ohne atomare Operationen oder Locks; verschiedene Interleavings können Inkremente verlieren (lost updates). Ein klassischer TOCTOU‑Fall entsteht, wenn die Existenz einer Datei geprüft und dann genutzt wird, während ein anderer Thread die Datei zwischen Prüfung und Nutzung ändert.

Fehlanwendung

Fehlanwendung
Jeden intermittierenden Fehler als Race Condition zu bezeichnen, ohne timingabhängige Interaktionen zu zeigen, oder zu glauben, willkürliche Sleeps würden das Problem zuverlässig reproduzieren oder beheben; ebenso zu glauben, Locks beseitigen das Risiko stets, ohne Deadlocks oder Priority Inversion zu berücksichtigen.

Konsequenz

Konsequenz
Richtig erkannte Race Conditions führen zu passender Synchronisation (Locks, Atomics, Transactions) oder Neugestaltung durch Immutability, was deterministisches Verhalten erzeugt; bleiben sie ungelöst, verursachen sie intermittierende Fehler, Datenkorruption oder schwer reproduzierbare Sicherheitslücken.

Umkehrung

Umkehrung
Serialisierung des Zugriffs auf die gemeinsame Ressource, Verwendung atomarer Primitiven, Nachrichtenpassing oder der Entwurf unveränderlicher Datenstrukturen kehrt den Nichtdeterminismus um, indem eine klar definierte Ordnung erzwungen oder gemeinsam veränderbarer Zustand beseitigt wird.

Abgrenzung

Abgrenzung
Beinhaltet Data Races und höherstufige Race Conditions; unterscheidet sich von Deadlock und Livelock (wo der Fortschritt stoppt oder spinnt) sowie von rein algorithmischem Nichtdeterminismus, der nicht aus unsynchronisiertem Zugriff auf gemeinsamen Zustand resultiert.

Semantische Spannung

Semantische Spannung
Spannungen bestehen zwischen dem Begriff 'Data Race' (niedrigstufiger unsynchronisierter Speicherzugriff) und dem weiteren 'Race Condition' (einschließlich Reihenfolge höherstufiger Operationen). Ebenso besteht Spannungen bei der Einordnung beobachteten Nichtdeterminismus als Nebenläufigkeit vs. Umweltfaktoren.

Synthese

Synthese
Eine Race Condition ist ein timing‑sensitiver Nebenläufigkeitsfehler, bei dem unsynchronisierter Zugriff auf gemeinsamen Zustand nichtdeterministische und potenziell falsche Ergebnisse liefert; demonstriert durch verlorene Updates oder TOCTOU‑Fehler, fehlinterpretiert ohne Timing‑Nachweis und zu beheben durch Synchronisation, Atomics oder Designänderungen, die Determinismus wiederherstellen.