Race Conditions

Beginner Algorithmen und Datenstrukturen Deutsch
Also available: English
Created by Best · 16.08.2026 at 09:13 UTC

Race Condition: das Ergebnis hängt von der zeitlichen Verschränkung nebenläufiger Zugriffe ab. Beispiel: zwei Threads inkrementieren denselben Zähler ohne Sync und verlieren Updates.

Gegenmittel: atomare Operationen, Locks, unveränderliche Daten.

$$\texttt{count++}=\mathrm{load};\,\mathrm{add};\,\mathrm{store}$$

Wo gebraucht

Jeder gemeinsame Zähler, Cache oder Collection ohne Happens-Before ist ein Produktionsbug unter Last. Flaky Tests sind oft Races.

Vertiefung

Eine Race Condition liegt vor, wenn das Ergebnis von der zeitlichen Überlagerung konkurrierender Zugriffe abhängt. Schon count++ besteht aus Lesen, Berechnen und Schreiben. Zwei Threads können denselben alten Wert lesen und eine Erhöhung verlieren.

Korrektheit verlangt, zusammengehörige Operationen atomar oder unter einer passenden Synchronisationsregel auszuführen. Entscheidend ist nicht nur gegenseitiger Ausschluss, sondern auch Sichtbarkeit: Änderungen eines Threads müssen nach der Synchronisation für andere beobachtbar sein.

Schwierigkeitsstufen

  1. Eine verlorene Aktualisierung in Einzelschritte zerlegen.
  2. Kritische Abschnitte anhand gemeinsamer Invarianten bestimmen.
  3. Ausschluss und Speichersichtbarkeit gemeinsam begründen.

Fallstricke

Seltene Reproduktion ist kein Beleg für Sicherheit. Logging oder Debugging kann das Timing verändern und den Fehler verdecken. Auch mehrere einzeln threadsichere Methoden bilden zusammen nicht automatisch eine atomare Gesamtoperation.

University approvals: 0
Tasks
Question 1

Was kennzeichnet eine Race Condition?

Question 2

Zwei Threads führen count++ gleichzeitig aus. Wie kann eine Erhöhung verloren gehen?

Question 3

Implementiere einen threadsicheren Zähler. inc und get müssen synchronisiert sein.

Hint

Das Schlüsselwort synchronized kann direkt in die Methodendeklaration vor den Rückgabetyp geschrieben werden.

Starter code is prefilled; replace TODO blocks with your solution.
1 test case will be used for grading
Run checks runtime behavior only. Final correctness is evaluated when you submit.
Card Info
  • Topic: Algorithmen und Datenstrukturen
  • Difficulty: Beginner
  • Completed: 0 users
Creator
Best
Best
BestBuddy