Zum Inhalt springen

Informatik · Klasse 12 · aktualisiert

Monitor in der Informatik: Synchronisation verstehen

Du lernst, wie ein Monitor gemeinsame Daten schützt, wie wait() und signal() Threads koordinieren und wie Java das mit synchronized umsetzt.

0 von 9 Aufgaben gelöst

Monitor in der Informatik: Synchronisation verstehen

Kurz gesagt

Ein Monitor ist ein Modul, das gemeinsame Daten und ihre Zugriffsmethoden bündelt. Seine Monitor-Operationen laufen nur nacheinander. Mit wait() und signal() warten Threads auf Bedingungen. Java setzt das mit synchronized, wait(), notify() und notifyAll() um.

Zwei Threads ändern gleichzeitig denselben Kontostand, und plötzlich stimmt das Geld nicht mehr. Solche Fehler sind schwer zu finden, weil sie nur manchmal auftreten. Ein Monitor verhindert sie, ohne dass du jede Sperre selbst von Hand programmieren musst. Hier lernst du, wie das funktioniert.

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 innerhalb eines Programms. Mehrere Threads können dieselben Daten benutzen. Ein kritischer Abschnitt ist eine Ansammlung von Programmanweisungen, in der sich zu einer Zeit nur ein einziger Thread aufhalten darf. Er besteht aus mehreren Einzelanweisungen. Deren Zwischenergebnisse sind inkonsistente Zustände, auf die andere Threads keinen Zugriff erhalten dürfen. Nach außen darf das Ergebnis nur als eine unteilbare Einheit sichtbar werden.

Wenn sich ein Thread in einem kritischen Abschnitt bezüglich eines Betriebsmittels befindet, darf kein anderer Thread in einen kritischen Abschnitt bezüglich desselben Betriebsmittels gelangen. Das nennt man wechselseitigen Ausschluss. Eine strenge Reihenfolge der Nutzung ist dafür nicht nötig.

Ein Monitor ist ein Modul (zum Beispiel eine Klasse), in dem die gemeinsam genutzten Daten und ihre Zugriffsprozeduren zu einer Einheit zusammengeführt sind. Zugriffsprozeduren mit kritischen Abschnitten werden als Monitor-Operationen gekennzeichnet. Sie laufen unter wechselseitigem Ausschluss, ohne dass im Programmcode Synchronisationsanweisungen stehen müssen. Ruft ein Prozess A eine Monitor-Operation auf, während diese oder eine andere Monitor-Operation schon von einem Prozess B ausgeführt wird, wird A blockiert. Man stellt sich den Monitor oft als Raum vor, in dem nur ein Akteur Platz findet.

Definition

Monitor

Ein Monitor ist ein programmiersprachliches Konzept zur Synchronisation von Zugriffen mehrerer Prozesse oder Threads auf gemeinsam genutzte Datenstrukturen oder Ressourcen. Ein Compiler fügt dafür die nötigen Synchronisationsprimitive ein.

Beispiel: Ohne Schutz geht ein Zähler falsch (Annahme: zaehler startet bei 0)

  1. 1Annahme: Lesen und Schreiben von zaehler sind getrennte Schritte.
  2. 2Thread X liest zaehler (Wert 0). Thread Y liest zaehler ebenfalls (Wert 0).
  3. 3Beide erhöhen ihre private Kopie auf 1.
  4. 4X schreibt 1 zurück, danach schreibt Y ebenfalls 1.
  5. 5Endergebnis: 1 statt 2. Mit wechselseitigem Ausschluss läuft erst ein Thread komplett durch, dann der andere.

Merke: Ein Monitor sorgt dafür, dass seine Monitor-Operationen immer nur von einem Prozess zur Zeit ausgeführt werden.

Teste dich

LeichtWas verlangt der wechselseitige Ausschluss bei kritischen Abschnitten?

Alles auf einen Blick

Monitor (Informatik)

  • Kritischer Abschnitt

    Dort darf sich zu einer Zeit nur ein Thread aufhalten.

  • Monitor

    Er bündelt Daten und Monitor-Operationen und führt diese unter wechselseitigem Ausschluss aus.

  • wait() und signal()

    wait() blockiert außerhalb des Monitors, signal() deblockiert einen Wartenden.

  • Hoare und Mesa

    Entscheidend ist, wer nach signal() weiterläuft.

  • Java

    synchronized, wait(), notify() und notifyAll() setzen das um; der Geweckte prüft seine Bedingung erneut.

Musteraufgabe · Schritt für Schritt

Kontostand ohne Schutz und mit Schutz

  1. 1Aufgabe: Das Konto hat 100 €. Person 1 zahlt 50 € ein, Person 2 hebt 100 € ab. Beide arbeiten zeitlich verschränkt ohne Schutz.
  2. 2Person 1 liest den Kontostand: 100 €.
  3. 3Person 2 liest 100 €, hebt 100 € ab und schreibt 100 € − 100 € = 0 €.
  4. 4Person 1 schreibt ihren Wert: 100 € + 50 € = 150 €.
  5. 5Der Stand 150 € ist falsch, die Abhebung ging verloren. Richtig wäre 100 € − 100 € + 50 € = 50 €.
  6. 6Lesen, Rechnen und Schreiben bilden zusammen den kritischen Abschnitt. Mit wechselseitigem Ausschluss läuft er bei einer Person komplett durch, bevor die andere beginnt.

Fehler finden

Prüfe die Aussagen zu Java und dem Monitor 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.

Ruft ein Prozess wait() auf, wird er blockiert und wartet des Monitors in einer Warteschlange. Beim blockiert signal den signalisierenden Prozess nicht. In Java entblockiert irgendeinen an diesem Monitor blockierten Thread.

Karteikasten

Erst selbst überlegen, dann umdrehen.

Übung mit Feedback

Abschluss-Check: Monitor (Informatik)

LeichtProzess A ruft eine Monitor-Operation auf, während Prozess B gerade eine andere Monitor-Operation desselben Monitors ausführt. Was geschieht mit A?
MittelBeim Mesa-Typ ruft Prozess S signal() auf, während Prozess W an der Bedingungsvariablen wartet. Was gilt?
SchwerWarum prüft ein mit notify() geweckter Java-Thread seine Bedingung erneut?

Weiterlesen in Informatik