Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Der kritische Abschnitt

Ähnliche Präsentationen


Präsentation zum Thema: "Der kritische Abschnitt"—  Präsentation transkript:

1 Der kritische Abschnitt

2 Der kritische Abschnitt
Parallele Prozesse durchlaufen: Phasen, die nebenläufig abgearbeitet werden können, weil sie einander nicht beeinflussen; Phasen, die synchronisiert werden müssen, weil sie auf gemeinsame Ressourcen zugreifen. Wenn man die Synchronisation vergisst, kann es zu Verklemmungen kommen. Den kleinstmöglichen Teil innerhalb eines Prozesses, der synchronisiert werden muss, bezeichnet man als kritischen Abschnitt. Beim Programmieren ist es wichtig, dass man möglichst nicht mehr als nur den kritischen Abschnitt synchronisiert, damit Prozesse nicht unnötig aufeinander warten müssen.

3 Monitor Eine einfache Möglichkeit, einen kritischen Abschnitt zu behandeln, besteht darin, dass man immer nur einen einzigen Prozess in den Abschnitt hineinlässt. Alle anderen Prozesse werden gezwungen zu warten, bis der erste Prozess den kritischen Abschnitt wieder verlassen hat. Diese Vorgehensweise nennt man einen Monitor. In Java kann man Monitore mit dem Schlüsselwort synchronized programmieren. Mit public synchronized void nutzeRessource () {…} erklärt man eine ganze Methode zum Monitor. Mit synchronized (flugzeug) { frageAn (); buche (); } wird für das flugzeug ein Anweisungsblock synchronisiert.

4 Semaphor Wenn von einer Ressource viel vorhanden ist, dann ist es ineffizient, das Verbrauchen der Ressource über einen Monitor zu regeln, denn Prozesse dürfen gleichzeitig die Ressource verbrauchen. Erst wenn ein Prozess mehr von der Ressource anfordert, als vorhanden ist, muss er warten. Wir müssen also einfach mitzählen, wie viel von der Ressource noch vorrätig ist. Einen solchen Zähler nennen wir Semaphor. In Java können wir ihn als Variable implementieren, deren Hoch- und Herunterzählen durch einen Monitor geschützt ist. Wir können auch die Java-Klasse Semaphore nutzen, die im wesentlichen genau dasselbe für uns erledigt: Wenn wir mit private Semaphore plaetze = new Semaphore (200); 200 Sitzplätze reservieren, können wir sie einzeln mit plaetze.acquire () und plaetze.release () belegen und wieder freigeben.

5 Das Philosophenproblem von Dijkstra
Die fünf Philosophen am runden Tisch durchleben jeweils den folgenden Prozess: Wiederhole immer: Denke. Warte, bis das linke Stäbchen frei ist. Nimm das linke Stäbchen. Warte, bis das rechte Stäbchen Nimm das rechte Stäbchen. Iss. Lege das rechte Stäbchen zurück. Lege das linke Stäbchen zurück. EndeDerWiederholung. Verklemmung entsteht, wenn jeder Philosoph sein linkes Stäbchen genommen hat, weil dann keiner mehr sein rechtes Stäbchen nehmen kann.

6 Lösung zum Philosophenproblem
Wir sorgen durch einen Monitor dafür, dass ein Philosoph, der sein linkes Stäbchen nimmt, bald sein rechtes bekommt: Wiederhole immer: Denke. Warte, bis das linke Stäbchen frei ist. Nimm das linke Stäbchen. Warte, bis das rechte Stäbchen Nimm das rechte Stäbchen. Iss. Lege das rechte Stäbchen zurück. Lege das linke Stäbchen zurück. EndeDerWiederholung. Im schlimmsten Fall müssen alle Philosophen, die Hunger haben, warten, bis der rechte Nachbar des Philosophen im Monitor seine Mahlzeit beendet hat.


Herunterladen ppt "Der kritische Abschnitt"

Ähnliche Präsentationen


Google-Anzeigen