Das Problem, was wir jetzt gerade gesehen hatten, mit dem Banktransfer, entspricht dem klassischen
Problem der sogenannten speisenden Philosophen. Und bei diesen Problemen geht es letztendlich
denn darum, wie die Geschichte es erzählt. Wir haben hier fünf Philosophen, die haben
nichts anderes zu tun, als zu denken und zu essen und sitzen, nur den ganzen Tag an
einem gemeinsamen runden Tisch. Das Denken hungrig macht, also wird dann auch jeder Philosoph
mal von Zeit zu Zeit essen müssen. Dazu benötigt ein Philosoph jedoch eben stets
beide neben seinem Teller liegende Stäbchen. Der Philosoph würde jetzt hier im Prozess
entsprechen in unserem Rechensystem. Die Stäbchen sind die Betriebsmittel, die dann
praktisch dieser Prozess benötigt. Der Philosoph braucht beide Stäbchen, um essen zu können.
Der Stillstand kommt genau dann zustande, also in einer ganz einfachen Form, wenn man jetzt
mal unterstellen würde, dass alle Philosophen, die da an diesem Tisch sitzen, dieser Tisch
bildet also unser Prozesssystem, dass alle diese Philosophen, alle diese Prozesse eben zugleich
das linke Stäbchen aufnehmen. Die Prozesse fordern also das eine Stäbchen an und greifen
anschließend auf das andere rechte Stäbchen zu. Die Prozesse wollen dann noch das zweite
Betriebsmittel dazu haben. Das ist die Situation, die wir haben und dann wird es zwingend zum
Stillstand kommen. Das nehmen wir gleich noch ein bisschen weiter auseinander. Der Prozess
führt den Überweisungsvorgang letztendlich durch und die Stäbchen als Betriebsmittel
repräsentieren hier unser Konto. Wenn wir jetzt mal das Beispiel aus dem Bankwesen betrachten,
das heißt, wir haben die Überweisungsprozesse, die fordern also zugleich das jeweilige Quellkonto
an und belegen es damit und fordern dann anschließend das Zielkonto an. Zwischen diesen beiden Schritten
dass sie praktisch das Quellkonto bereits besitzen und das Zielkonto noch anfordern, werden sie
dann jeweils verdrängt. Und dann kommt dann noch mal der jeweils andere Überweisungsprozess
daher und schnappt einem als Quellkonto das Zielkonto seines Vorgängers sozusagen weg.
Das ist die Situation, die wir da haben. Nun wir können das umsetzen hier in einer c-artigen Sprache.
Nehmen wir mal an, so ein Philosoph wird durch diese Prozedur Phil repräsentiert, bekommt als
Argument halt die Nummer, die er ist, der erste, zweite, vierte Philosoph. Es wird überprüft,
ob es der sozusagen, ob dieser Prozess hier, der Philosoph hier zu dem Prozesssystem
gehörte. Unterstellen wir mal, es macht diese Checkoperation und dann führen sie durch, weg
immer diese Operation durch. Sie denken ein wenig, dann sind sie hungrig geworden. Sie wollen jetzt
die Stäbchen aufnehmen, um zu essen und wenn sie damit fertig sind, dann legen sie die Stäbchen
dann letztendlich zurück. Das was uns hier vollkommen uninteressant halt erstmal ist,
ist der Denkprozess und ist der Essprozess. Das ist vielleicht für die Philosophen wichtig,
aber ist für uns als informatisches System irrelevant. Sondern wir wollen uns einzig und
allein auf diese Claim und diese Clear Prozeduren hier mal kümmern, die nämlich die Betriebsmittelverwaltung
betrifft in dem System. Die Stäbchenverwaltung jetzt hier würden wir jetzt konkret einfach
auf Simafro Basis durchführen. Wir unterstellen mal einfach, dass wir jetzt hier so ein Simafro
Array halt haben. Damit haben wir also entsprechend der Anzahl der Philosophen, die halt hier an dem
Tisch sitzen, ein entsprechend großes Array und wir haben eine initiale Vorbelegung, wo man hier
sieht, dass jedes dieses Stäbchen frei verfügbar ist. Also initial ist dann der jeweilige Simafro
mit eins belegt. Wenn er beansprucht werden würde, würde ja der Zähler runtergezählt werden,
denn ist er null. Und dann wissen wir, dass wenn dieser Nullwert erreicht ist, dann vor einer
Erhöhung halt kein weiterer Anforderungen über diesen betreffenden Simafro denn halt möglich ist.
Die Check Prozedur validiert unseren Philosophenprozess. Im Wesentlichen geht es hier
bei uns nur darum, aus dieser Philosophennummer, die wir halt haben, ein Feldindex zu generieren.
Die eigentlich interessanten Operationen sind Claim und Clear. Ja und was macht Claim? Macht
die P-Operation von dem einen Stäbchen, macht die P-Operation des Nachbarstäbchens. Das ist also
genau das gleiche Muster, was wir vorher schon gesehen haben bei unserem Banktransfer in unserer
Claim Prozedur, die wir dort verwendet haben. Und die Clear Operation inverse gibt erst mal das
eine Stäbchen zurück und gibt dann das andere Stäbchen letztendlich zurück. Und wir haben natürlich
die gleiche wettlaufkritische Situation hier zu berücksichtigen, die jetzt aufgrund von der
Presenters
Zugänglich über
Offener Zugang
Dauer
00:14:22 Min
Aufnahmedatum
2020-12-14
Hochgeladen am
2020-12-14 11:59:32
Sprache
de-DE