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,
Presenters
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