56 - 11.6: Speisende Philosophen [ID:26447]
50 von 127 angezeigt

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

Teil eines Kapitels:
10.4 Kreiseln

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

Einbetten
Wordpress FAU Plugin
iFrame
Teilen