Zum Inhalt springen

Informatik · Klasse 12 · aktualisiert

Kritischer Abschnitt: Race Conditions verstehen

Du lernst, warum mehrteilige Änderungen an einem Zähler schiefgehen können, was eine Race Condition ist und welche Regeln eine Lösung erfüllen muss.

0 von 10 Aufgaben gelöst

Kritischer Abschnitt: Race Conditions verstehen

Kurz gesagt

Ein kritischer Abschnitt ist ein Stück Programm aus mehreren Anweisungen, in dem sich zu einer Zeit nur ein Thread aufhalten darf. Sonst kann eine Race Condition entstehen: Das Ergebnis hängt vom zeitlichen Ablauf ab und kann falsch sein. Dagegen hilft wechselseitiger Ausschluss.

Stell dir (ausgedachtes Beispiel) vor, zwei Threads zählen gemeinsam Besucher einer Webseite. Ohne Schutz kann am Ende eine Zahl fehlen, obwohl jeder Thread für sich richtig arbeitet. Das kann passieren, wenn mehrere Threads dieselbe Variable ändern und sich dabei überschneiden. Hier lernst du, warum das so ist und was dagegen hilft.

Deine Lernziele

Hake ab, was du schon kannst. Löst du alle Aufgaben eines Abschnitts, hakt Mela das Ziel für dich ab.

4 Abschnitte

Ein Thread ist ein Ablauf, der Programmanweisungen ausführt. Mehrere Threads können dieselben Daten benutzen. Viele Änderungen bestehen aus mehreren Einzelschritten. Zwischen diesen Schritten ist der Zustand der Daten nicht stimmig. Man nennt ihn inkonsistent.

Ein Beispiel ist das Erhöhen eines Zählers um 1. Es wird hier angenommen, dass der Zugriff auf den Zähler nur mit einer Lese- oder einer Schreiboperation möglich ist, nicht mit einer von Haus aus unteilbaren Erhöhung. Dann sind es drei Schritte: den Zähler in eine lokale Variable lesen, die lokale Variable um 1 erhöhen, die lokale Variable in den Zähler schreiben.

Kritische Abschnitte bestehen aus mehreren Einzelanweisungen. Ihre Zwischenergebnisse sind inkonsistente Zustände, auf die andere Threads keinen Zugriff erhalten dürfen. Kritisch ist so ein Abschnitt, wenn er auf ein gemeinsam genutztes Betriebsmittel zugreift, das nur exklusiv benutzt werden darf, zum Beispiel eine gemeinsame Variable, die er verändert. Das Ergebnis darf nur als eine unteilbare Einheit nach außen sichtbar werden. Eine Operation, die als Ganzes abläuft und von anderen nicht unterbrochen werden kann, heißt atomare Operation.

Definition

Atomare Operation

Eine atomare Operation ist ein Verbund von Einzeloperationen, der als logische Einheit gilt. Er läuft nur als Ganzes erfolgreich ab oder schlägt fehl und kann nicht durch andere Operationen unterbrochen werden.

Merke: Ein kritischer Abschnitt besteht aus mehreren Einzelanweisungen auf einem gemeinsam genutzten Betriebsmittel. Ihre Zwischenergebnisse sind inkonsistent und für andere Threads tabu.

Teste dich

LeichtWarum kann eine Änderung aus mehreren Einzelanweisungen kritisch sein?
MittelWas zeichnet eine atomare Operation aus?

Alles auf einen Blick

Kritischer Abschnitt

  • Kritischer Abschnitt

    mehrere Einzelanweisungen auf einem gemeinsam genutzten Betriebsmittel, deren Zwischenergebnisse inkonsistent sind

  • Race Condition

    Das Ergebnis hängt vom zeitlichen Verhalten der Einzeloperationen ab

  • Zähler

    Lesen beide Threads vor dem Schreiben, haben beide denselben alten Wert

  • Wechselseitiger Ausschluss

    Je Betriebsmittel ist höchstens ein Thread im kritischen Abschnitt

  • Begrenzte Wartezeit

    Kein Thread wird beliebig lange vom Eintritt ausgeschlossen

  • Fortschritt

    Ein Anhalten außerhalb des Abschnitts darf die anderen nicht beeinflussen

Musteraufgabe · Schritt für Schritt

Erhöhen und Verringern zugleich (ausgedachtes Beispiel)

  1. 1Annahme: Der Zähler steht auf 5. Thread P erhöht ihn um 1, Thread Q verringert ihn um 1. Erwartet wird 5.
  2. 2Ablauf ohne Sperre: P liest 5. Q liest ebenfalls 5, weil P noch nicht geschrieben hat.
  3. 3P erhöht seine Kopie auf 6. Q verringert seine Kopie auf 4.
  4. 4P schreibt 6. Danach schreibt Q die 4.
  5. 5Ergebnis: 4 statt 5. Die Erhöhung von P ging verloren.
  6. 6Schreibt Q zuerst und P zuletzt, ergibt sich 6. Das Ergebnis hängt also vom zeitlichen Ablauf ab: eine Race Condition.
  7. 7Mit Ausschluss läuft ein Abschnitt nach dem anderen: P macht aus 5 die 6, danach Q aus 6 die 5. Ergebnis: 5.

Fehler finden

Prüfe die Schritte beim Kartenzähler (ausgedachtes Beispiel) In einer Zeile steckt ein Fehler. Tippe sie an.

Lückentext

Wähl in jeder Lücke das passende Wort und prüf dann deine Antworten.

Ein kritischer Abschnitt wie „lesen, erhöhen, schreiben“ besteht aus . Im verschränkten Ablauf lesen beide Threads, bevor einer schreibt, und haben dann als private Kopie. Beim wechselseitigen Ausschluss darf sich je Betriebsmittel höchstens im kritischen Abschnitt befinden.

Karteikasten

Erst selbst überlegen, dann umdrehen.

Übung mit Feedback

Abschluss-Check: Kritischer Abschnitt

LeichtWas beschreibt eine Race Condition?
MittelEin Test mit zwei Threads läuft fehlerfrei durch. Was folgt daraus für die Software?
SchwerEin Prozess hält außerhalb seines kritischen Abschnitts an. Was muss die Lösung dann sicherstellen?

Weiterlesen in Informatik