Kritischer Abschnitt
Ein kritischer Abschnitt ist eine Sequenz von Befehlen, die nicht durch
einen Prozesswechsel unterbrochen werden darf.
Im einfachsten Fall wird der eigentliche Auslöser eines Prozesswechsel,
die Annahme einer Unterbrechung, verhindert. Dies geschieht entweder als
Teil eines Assemblerbefehles oder als explizite Abschaltung der Unterbrechungsannahme.
Größere Abschnitte in einer Hochsprache benöigen eine datentechnische
Verwaltung.
Normalerweise werden Unterbrechungen am Ende jedes Assemblerbefehles
akzeptiert. Bei Befehlen, die z.B. Segmentregister in einem 80386 Prozessor
umladen, wird keine Unterbrechung angenommen, da normalerweise ein zweites
Register mit einem Folgebefehl geladen werden muß.
Mehrere Assemblerbefehle werden durch Abschalten des gesamten Unterbrechungssystems
geschützt.
Abschnitte in einem Programm, das mit einer Hochsprache geschrieben
wurde, verwenden eine Datenstruktur, die Semaphor genannt wird. Ein kritischer
Abschnitt wird durch eine eigene Semaphor geschützt. Prozesse, die
den Abschnitt betreten wollen, müssen sich dort registrieren. Entweder
wird der Prozess durchgelassen, oder er wird geparkt. Beim Verlassen wird
die Semaphor wieder freigegeben und der nächste wartende Prozess kann
den Abschnitt betreten.
Java unterstützt kritische Abschnitte durch Sperren (Semaphore).
Sperren werden automatisch eingerichtet, wenn eine Methode oder eine Block
mit dem Schlüsselwort "synchronized" definiert wird.
Typische Anwendungen müssen dann noch mit wait() den laufenden
Prozeß anhalten oder mit notifyAll() wartende Prozesse informieren. |