next up previous contents
Next: Metasperren Up: Synchronisierung Previous: Variable Monitordarstellung   Inhalt

Feinstruktur von Monitoren

Obwohl Monitore in Java Sprachprimitive sind, mit deren Hilfe nebenläufige Berechnungen auf gemeinsamen Daten koordiniert werden, zeigt sich, daß sie selbst komplexe Datenstrukturen darstellen. Ein Monitor nach Java-Semantik enthält eine rekursive Sperrre und eine Ereignisvariable und muß demnach mindestens folgende Informationen vereinigen:

  monitor:
    owner       ; Besitzer der Sperre (aktiv)
    depth       ; Erwerbungstiefe
    entering    ; Menge der erwerbenden Threads (suspendiert)
    waiting     ; Menge der wartenden Threads (suspendiert)

Weiterhin müssen -- abhängig von der Thread-Implementierung -- Mechanismen zum Suspendieren und Reaktivieren von Threads existieren.

Damit lässt sich eine abstrakte Implementierung für Monitore konstruieren: die Monitoroperationen monitorenter und monitorexit können dann wie in Abbildung 5.4 implementiert werden. Sie garantieren gegenseitigen Ausschluß im Zugriff auf ihr Java-Objekt.

Die gewählte Monitorimplementierung hängt von der gewünschten Monitorsemantik ab -- z.B. ob und wie die Erwerbungsreihenfolge von der Ankunftsreihenfolge der Threads abhängen soll. Die Java-Spezifikation gibt hier keine besondere Semantik vor.

Unabhängig davon ist der hier dargestellte Algorithmus in einem zentralen Punkt unvollständig: die Monitorstruktur selbst ist nicht vor nebenläufigem Zugriff geschützt. Um einen atomaren Übergang des Monitorzustands zu garantieren, muß sie wiederum durch eine Sperre abgesichtert werden. [Agesen et al., 1999] sprechen von einer Metasperre (meta-lock).

Abbildung 5.4: Pseudo-Implementierung der Monitoroperationen monitorenter und monitorexit
\begin{figure}
\begin{verbatim}monitorenter:
if owner is null:
owner := curren...
...ment removed from entering
depth := 1
wake up owner\end{verbatim} \end{figure}


next up previous contents
Next: Metasperren Up: Synchronisierung Previous: Variable Monitordarstellung   Inhalt

2001-02-28