Data Race
Ein Data Race tritt auf, wenn mehrere Threads ohne Synchronisierung gleichzeitig auf dieselbe Speicherstelle lesen und schreiben, wobei mindestens ein Schreibvorgang stattfindet — was undefiniertes Verhalten verursacht.
Zweck
Das undefinierte Verhalten verstehen, das Data Races verursachen, und ihre Abwehrmaßnahmen; ein Kernanliegen der Korrektheit nebenläufiger Programme.
Mechanismus
Thread A schreibt x, während Thread B ohne Synchronisierung x liest/schreibt; das Ergebnis ist unbestimmt (zerrissene Werte, partielle Schreibvorgänge). In C/C++ ist ein Data Race undefiniertes Verhalten. Abwehr: Mutexe, atomare Operationen, Memory-Barrieren.
Anwendungsfälle
- Analyse der Korrektheit der Nebenläufigkeit
- Thread-Sicherheitsaudit
- Erkennung von Data Races