Monitor (im Sinne der Synchronisation, nicht zu verwechseln mit Bildschirm) ist ein Konstrukt, das geschützte Daten zusammen mit den darauf arbeitenden Funktionen kapselt: Zu jedem Zeitpunkt darf höchstens ein Thread eine Monitor-Funktion ausführen. Entwickelt wurde das Konzept 1972 von Per Brinch Hansen und 1974 von C. A. R. Hoare in dessen berühmtem Aufsatz "Monitors: An Operating System Structuring Concept".
Bausteine: Sperre plus Bedingungsvariablen
Jeder Monitor besteht aus zwei Teilen:
- Impliziter Mutex: Der Zugang zu den Monitor-Funktionen ist automatisch gegenseitig ausschließend — der Entwickler vergisst kein
lock/unlock. - Bedingungsvariablen (condition variables): Warteschlangen für Threads, die auf eine Bedingung warten. Mit
wait()gibt der Thread die Sperre frei und schläft; mitsignal()(bzw.notify()) wird ein wartender Thread geweckt.
Damit lassen sich typische Muster wie Erzeuger-Verbraucher (Producer-Consumer) elegant formulieren.
Hoare- und Mesa-Semantik
Wichtig ist der Unterschied zwischen zwei Weck-Semantiken: Bei der Hoare-Semantik (signal and wait) wechselt die Kontrolle sofort an den geweckten Thread. Bei der Mesa-Semantik (signal and continue, benannt nach der Sprache Mesa von Xerox PARC, Lampson/Redell 1980) läuft zunächst der signalisierende Thread weiter; der geweckte Thread erhält die Sperre erst später. Weil die Bedingung inzwischen wieder falsch sein kann, prüft man sie in der Praxis in einer while-Schleife statt mit if.
Monitore in Programmiersprachen
In Java ist jedes Objekt ein Monitor: synchronized-Blöcke/-Methoden plus wait()/notify()/notifyAll(). C# bietet das lock-Statement und die Monitor-Klasse mit Wait/Pulse/PulseAll. In Python kombinieren threading.Lock sowie threading.Condition Sperre und Bedingungsvariable; in Go sind es sync.Mutex und sync.Cond.
Abgrenzung zum Semaphor
Der Semaphor ist ein nackter Zähler mit P()/V()-Operationen — wer die Reihenfolge vertauscht oder ein V() vergisst, bekommt schwer auffindbare Fehler. Der Monitor zwingt durch die Kapselung zu einer strukturierten Nutzung und macht Bedingungen explizit sichtbar. Beide sind gleich mächtig: Ein Monitor kann einen Semaphor implementieren und umgekehrt. Zusammen mit dem kritischen Abschnitt und atomaren Operationen bilden Monitore das Fundament der Nebenläufigkeit.