29 - 10.2.5 Monitore: Bedingungsvariable [ID:24407]
50 von 227 angezeigt

Nun das zweite wichtig mit einem Monitor verbundene Konzept ist die

Bedingungsvariable. Wir wollen es einmal die Definition dieser Bedingungsvariabel anschauen,

dann auf die Operationen eingehen, wie die zusammen spielen. Nun wir sehen, das sind

und Signal, aber dann im Wesentlichen eben die unterschiedlichen Signalisierungseigenschaften

dieser Variablen demintrachten, die letztendlich eben auch unterschiedliche architektonische

Merkmale eines Monitors ausmachen. So eine Bedingungsvariable ist einfach eine Variable

ohne Inhalt. Es ist schon eine Variable, aber man kann auf den Inhalt, auf den Wert dieser

Variable durchs Programm praktisch nicht zugreifen. Man kann sagen, diese Wiederwarnung ist falsch.

Sie wird verwendet, um praktisch Prozesse steuern zu können, den Wartezustand von Prozessen

steuern zu können. Es gibt zwei grundsätzliche Operationen, die mit der Bedingungsvariabel verbunden

sind, womit man Bedingungs-Synchronisation oder auch logische Synchronisation durchführen kann.

Die Single- und Die Weight-Operation. Die Signal-Operation zeigt so ein Ereignis an.

Sie ist wirkungslos, wenn man ein Single absetzt und gar kein Prozess wartet da drauf.

Und es wird auf jeden Fall einen wartenden Prozess in so einer Ereigniswarteschlange

halt bereit setzen. Also wenigstens einen, der da drauf wartet, sollte einer warten,

den wieder einen Fortschritt ermöglichen. Die Weight-Operation setzt eben ein Prozess,

der Weight ausführt bis zur Anzeige eines bestimmten Ereignisses, was sich auf seine

Wartepedingung bezieht. Aus der Prozess gibt es damit implizit die Kontrolle über den Monitor

frei und wartet sozusagen zur Wiederaufnahme seiner Ausführung. Das würde dann geschehen,

wenn durch einen anderen Prozess, der sich dann im Monitor befindet, eingetreten ist,

eine Single-Operation ausgeführt wird. Die Bedingungsvariable wird manchmal auch als

Ereignisvariable bezeichnet, wo denn auch unterschiedliche, sage ich mal, Operationen

darauf definiert sind, die sich weniger von einer Semantik halt unterscheiden als von dem Namen.

Im Endeffekt, Cause und Await hat auch damit zu tun, welche Leute damals die Monitore erfunden

haben, dass die unterschiedliche Begrifflichkeit im Wesentlichen verwendet haben. Heute würde man

mit den Ereignisvariablen die Operation Cause und Await assozieren. Cause entspräche einem

Signal Await, entspricht sozusagen dem Weight, mit dem Weight einer Bedingungsvariablen. Die

Cause-Operation ist typischerweise immer so ausgelegt, dass sie praktisch alle Prozesse

denn freistellt. Wir werden sehen, dass eine Single-Operation auch durchaus dazu führt,

je nach Monitorart, dass nur ein Prozess, obwohl mehrere warten, eben ausgewählt wird und dann

freigestellt wird. Beim Cause sind es immer alle, die dann wirklich warten. Es würde dann aber so sein,

dass dann Prozesse, die dann bereits mal im Monitor drin gewesen sind, einen Umweg über

eine Ereigniswarteschlange nehmen mussten, dass die dann beim Wiedereintritt in den Monitoren

einen gewissen Vorrang erhalten. Egal wie das technisch implementiert ist, ob es eine Vorrangwarteschlange

ist, die man da nutzt oder ob man dann praktisch diese Prozesse einfach vorne in so einer Eintrittswarteschlange

denn einsortiert, im Moment wo die Cause-Operation für diese Prozesse, die auf das Ereignis, auf den

Ereignis-Eintritt warten, genau zur Ausführung kommt. Die Wait-Operation führt dazu, dass ein

Prozess blockiert, bis eine Warte-Bedingung aufgehoben ist. Typisches Muster in der Anweisungsfolge

ist denn hier so dargestellt. Dem Wait geht praktisch immer ein Überprüfen einer Bedingung voraus.

Wenn die Bedingung gilt, dann wartet man auf ein entsprechendes Ereignis. So muss man das grundsätzlich

immer lesen, wobei diese Wenn-Operation sehr unterschiedlich ausgelegt sein kann. Es kann

nämlich letztendlich einer If-Operation entsprechen, wenn man sicherstellen kann, dass Zwischenereignisauslösung

bis zur Prozess-Einlastung, also bis ein Prozess aus seinem Wait rauskommt, dass diese Sequenzen von Anweisungen

eben eine unteilbare Aktion ist, also auch eine unteilbare Aktionsfolge. Dass man sicherstellen kann,

dass in der Zeit zwischen einem Signal und dem Wait, der zugehorsamierenden Wait, kein anderer Prozess

den Monitor betreten kann. Dann ist sicher, dass für den Prozess, der aus der Wait-Operation

rauskommt, dass die Wartbedingung nicht erneut definiert worden ist von irgendeinem anderen

Prozess, weil kein anderer eben außer der Signalisierer halt in diesem Monitor denn gerade gewesen ist.

Also dann würde das Wenn-An-If entsprechen. Ansonsten in allen anderen Fällen ist es eigentlich ein While.

Das heißt, wenn man aus der Wait-Operation rauskommt, dann muss man diese Wartbedingung erneut auswerten,

Teil eines Kapitels:
10.2 Monitore

Zugänglich über

Offener Zugang

Dauer

00:24:54 Min

Aufnahmedatum

2020-11-19

Hochgeladen am

2020-11-20 01:48:44

Sprache

de-DE

Einbetten
Wordpress FAU Plugin
iFrame
Teilen