Zum Inhalt springen

Informatik · Klasse 12 · aktualisiert

Nebenläufigkeit in der Informatik verstehen

Unterscheide verzahnte und gleichzeitige Abläufe, schütze gemeinsame Daten und erkläre Verklemmungen sowie das Warten auf freie Plätze oder Elemente.

0 von 9 Aufgaben gelöst

Nebenläufigkeit in der Informatik verstehen

Kurz gesagt

Nebenläufigkeit bedeutet, dass mehrere Abläufe zeitlich überlappend bearbeitet werden. Auf einem einzelnen Rechenkern wechseln sie sich ab; auf mehreren Kernen können sie gleichzeitig laufen.

Ein Thread ist ein einzelner Ausführungsablauf innerhalb eines Programms. Mehrere Threads können dieselben Daten nutzen und ihre Arbeitsschritte zeitlich verzahnen. Du untersuchst, wann dadurch Fehler oder Wartesituationen entstehen und wie sich die Zusammenarbeit regeln lässt.

Deine Lernziele

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

4 Abschnitte

Ein Prozessor führt die Arbeitsschritte eines Programms aus. Ein Rechenkern ist eine Ausführungseinheit des Prozessors; ein Prozessor kann mehrere Kerne besitzen. In unserem Ablaufmodell führt ein einzelner Kern zu einem Zeitpunkt einen Schritt eines Threads aus. Er kann zwischen Threads wechseln, bevor deren Aufgaben abgeschlossen sind. Das wirkt gleichzeitig und heißt hier scheinbare Nebenläufigkeit. Auf mehreren Kernen können Schritte verschiedener Threads tatsächlich gleichzeitig ausgeführt werden. Dafür wird auch die Bezeichnung echte Nebenläufigkeit verwendet.

Die Begriffe werden unterschiedlich weit gebraucht: Im engeren Sprachgebrauch bezeichnet Nebenläufigkeit die Organisation überlappender Abläufe. Parallelität bezeichnet dann deren tatsächlich gleichzeitige Ausführung. Nebenläufigkeit setzt nach diesem Verständnis keine mehreren Kerne voraus.

Ein Zugriff auf einen gemeinsamen Wert kann mehrere Schritte umfassen: den Wert lesen, eine eigene Kopie verändern und das Ergebnis zurückschreiben. Zurückschreiben ersetzt den bisherigen gemeinsamen Wert; es addiert ihn nicht zum neuen Wert. Zwei Threads können denselben alten Wert lesen und anschließend mit getrennten Kopien weiterrechnen. Schreibt einer später sein Ergebnis zurück, kann er das Ergebnis des anderen überschreiben. Dafür genügt ein Wechsel zwischen Threads auf einem einzigen Kern.

Die folgenden Abläufe sind ausdrücklich vereinfachte Modelle mit vollständig angegebenen Schritten. Sie beschreiben keine bestimmte Programmiersprache. Der gezeigte fehlerhafte Ablauf ist eine Möglichkeit: Bei anderer Reihenfolge können dieselben Änderungen auch ohne verlorenen Beitrag enden.

Definition

Race Condition

Eine Race Condition ist ein Fehler, bei dem das Ergebnis vom zeitlichen Zusammenspiel konkurrierender Abläufe abhängt. Hier greifen mehrere Threads ungeschützt auf denselben Wert zu, und mindestens einer verändert ihn.

Beispiel: Zwei Erhöhungen eines Zählers

  1. 1Ausgedachtes Ablaufmodell: Der gemeinsame Zähler beginnt bei 8. Die Threads A und B sollen ihn jeweils um 1 erhöhen.
  2. 2A liest 8 in seine eigene Kopie. Bevor A zurückschreibt, liest auch B den gemeinsamen Wert 8.
  3. 3A erhöht seine Kopie auf 9. B erhöht seine eigene Kopie ebenfalls auf 9.
  4. 4A schreibt 9 zurück. Danach schreibt B ebenfalls 9 zurück.
  5. 5Der Endwert ist 9. Bei vollständig nacheinander ausgeführten Erhöhungen wäre er 10. Ein Beitrag ist durch das Überschreiben verloren gegangen.

Teste dich

LeichtEin einzelner Rechenkern wechselt zwischen den Threads T und U, während beide ihre Aufgaben noch nicht abgeschlossen haben. Welche Einordnung passt?

Alles auf einen Blick

Nebenläufigkeit

  • Ausführung

    Ein einzelner Kern verzahnt Schritte. Mehrere Kerne können Schritte gleichzeitig ausführen.

  • Race Condition

    Ungeschützte Zugriffe können abhängig von ihrer Reihenfolge Ergebnisse überschreiben.

  • Schutz

    Derselbe Mutex oder ein passend verwendeter binärer Semaphor schützt den gesamten kritischen Abschnitt.

  • Verklemmung

    Ausschluss, Halten und Warten, fehlender Entzug und ein Wartekreis ermöglichen eine festgefahrene Wartesituation.

  • Zusammenarbeit

    Ein leerer Puffer lässt Verbraucher warten, ein voller begrenzter Puffer lässt Erzeuger warten.

  • Reihenfolge

    Zuerst auf Element oder Platz warten, danach den Pufferschutz erwerben. Aufwecken verspricht keine sofortige Ausführung.

Musteraufgabe · Schritt für Schritt

Einen Ablauf am Puffer mit fünf Plätzen verfolgen

  1. 1Ausgedachtes Modell: Ein Puffer hat fünf Plätze und enthält vier Elemente. Keine Operation läuft gerade. frei hat eine Freigabe, belegt hat vier und schutz hat eine. Beteiligt sind die Erzeuger E und F sowie der Verbraucher G.
  2. 2E führt P(frei) und P(schutz) aus, fügt sein Element ein und führt V(schutz) sowie V(belegt) aus. Jetzt enthält der Puffer fünf Elemente; frei hat null und belegt fünf Freigaben.
  3. 3F versucht P(frei) und blockiert. Er hat schutz noch nicht erworben und hält den Pufferschutz deshalb nicht fest.
  4. 4G führt P(belegt) und P(schutz) aus und entnimmt ein Element. Der Puffer enthält nun vier Elemente. G führt V(schutz) und V(frei) aus und liefert damit eine Platzfreigabe für F.
  5. 5Wenn F wieder läuft und sein P(frei) erfolgreich beendet ist, kann er P(schutz) ausführen und sein Element einfügen. Nach V(schutz) und V(belegt) enthält der Puffer wieder fünf Elemente.

Fehler finden

Prüfe die Verdopplung eines gemeinsamen Wertes 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 einzelner Rechenkern führt abwechselnd Schritte zweier noch nicht abgeschlossener Threads aus. Das ist . Zwei Threads sollen einen kritischen Abschnitt wechselseitig ausschließend betreten. Der gemeinsame Schutzsemaphor startet dafür mit . Ein begrenzter Puffer ist voll, und ein Erzeuger wartet auf einen Platz. Das eines Elements schafft einen freien Platz, der anschließend mit V(frei) gemeldet wird.

Karteikasten

Erst selbst überlegen, dann umdrehen.

Übung mit Feedback

Abschluss-Check: Nebenläufigkeit

LeichtAusgedachtes Ablaufmodell: Der gemeinsame Wert beginnt bei 5. Die Threads R und S lesen beide 5 und erhöhen ihre eigene Kopie jeweils um 2. R schreibt 7 zurück, danach schreibt S ebenfalls 7 zurück. Welcher Endwert entsteht?
MittelEin Verbraucher beginnt am leeren Auftragspuffer. Welche Reihenfolge wartet auf ein Element, bevor sie den Schutz für das Verändern des Puffers erwirbt?
SchwerAusgedachtes Modell mit drei exklusiven Sperren A, B und C: X hält A und wartet auf B, Y hält B und wartet auf C, Z hält C und wartet auf A. Es gibt keinen erzwungenen Entzug. Nach Erhalt seiner benötigten Sperren beendet jeder Thread seine Arbeit und gibt sie frei. Welche Maßnahme durchbricht diesen Wartekreis?

Weiterlesen in Informatik