Race Conditions
Race Conditions
Eine Race Condition liegt vor, wenn das Ergebnis einer Aktion nichtdeterministisch vom zeitlichen Verhalten anderer Prozesse abhängt. Voraussetzung: ein Prozess muss durch einen anderen „störbar" sein (z.B. durch Unterbrechung).
Definition
Das Ergebnis einer Aktion eines Prozesses hängt nichtdeterministisch vom zeitlichen Verhalten anderer Prozesse ab.
Voraussetzungen:
- ein Prozess muss durch einen anderen „störbar" sein,
- Beispiel einer Störung: die Unterbrechung durch einen anderen Prozess (Kontextwechsel mitten in einer Operation).
Das verlorene Update — interaktiv
Schon ein simples anzahl++ ist nicht atomar (lesen → rechnen → schreiben). Wird mitten drin unterbrochen, geht ein Update verloren:
Das Mailbox-Beispiel (Producer/Consumer)
Ein Puffer fester Größe, ein Schreiber (Producer) und ein Leser (Consumer), gekoppelt über eine globale Variable anzahl:
void schreiber(){ if(anzahl==MAX) sleep(); anzahl++; write(item); if(anzahl==1) wake(leser); }
void leser() { if(anzahl==0) sleep(); anzahl--; read(item); if(anzahl==MAX-1) wake(schreiber); }
Zwei Tücken:
- Wird der Leser während
anzahl--vom Schreiber (anzahl++) unterbrochen, kann ein Eintrag überschrieben werden. - Wird bei
anzahl==0der Leser vor demsleep()unterbrochen, kann daswake()des Schreibers verloren gehen — am Ende schlafen beide dauerhaft.
Folgerung: Manche Code-Strecken dürfen nicht unterbrochen werden, insbesondere der Zugriff auf gemeinsame Daten → der kritische Abschnitt.
Verwandte Notes
Kritischer Abschnitt & Mutual Exclusion · Spinlocks · Semaphoren · Prozess-Kommunikation
⬅️ Prozess-Kommunikation · Kritischer Abschnitt & Mutual Exclusion ➡️