Der kritische Abschnitt

Slides:



Advertisements
Ähnliche Präsentationen
Monitore in Java++ Aufgabe 2 von Markus Schlebusch Christoph Reinboth Sebastian Zok Johannes Stolte Norman Zuther.
Advertisements

Vertieferseminar Geoinformation WS 02/03
A. A B A B D A B D H ; H ist fertig abgearbeitet.
Ein Beispiel in Java.
Konzepte objektorientierter Systeme
Aufgabe 2 zur Binomialverteilung
Nsp Semaphore sind einfache Synchronisationsobjekte, ähnlich wie Ereignisse, aber unabhängig von Monitoren: (das) Semaphor: altes Flügelsignal.
Semaphore void Passieren (semaphore &s) { if (s > 0) { s--;
Kapitel 6.1 Nebenläufigkeit und wechselseitiger Ausschluss
Kapitel 7.2 Dining philosophers problem
Nebenläufige Programmierung
SWITCH - Anweisung.
Klassenvariable (auch Klassendaten bzw. statische Attribute genannt) und statische Methoden.
Ein Beispiel in Java.
Objekte werden als Adressen (Referenzen) übergeben. Dies führt manchmal zu unerwarteten Ergebnissen...
WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
DO...WHILE Anweisung.
Programmieren mit JAVA
Praxis-Repetitorium JAVA zusätzliche, ergänzende Lehrveranstaltung
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Programm besteht aus mehreren Bestandteilen: Schlüsselwörter Sonderzeichen Bezeichner Kommentare Texte.
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Das Roboterprojekt Einführung Der erste Entwurf Das Thread-Konzept Hindernisse Website.
Java Threads Sebastian Werler
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Prozesskoordination Prof. Dr. W. Riggert.
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
Variablen addieren Beispiele: ☼ + ☼ + ☼ + ☼ + ☼ = 5☼ 3☼ + 4☼ =
im neuen Jahr nur die schönen Momente Deiner Erfahrungen
Informatik Zustandsorientiertes Modellieren und Programmieren 2.4 Datenkapselung 2.4 Datenkapselung Objekte können miteinander kommunizieren, indem.
2. Zustandsorientiertes Modellieren 2.4 Datenkapselung
Prozess-synchronisation
Thread Synchronisation in JAVA
Aufruf einer Methode eines Objektes vom Typ „Bruch“
Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung.
Letzte Chance!!! Exceptions Thread, Runnable Synchronized Wait, notify, notifyAll Thread States Semaphoren JCSP Swing JOMP Linearizability History Amdahl‘s.
Parallelisierung für Multiprozessor-Maschinen Teil 2.
Programmiervorkurs WS 2014/15 Methoden
Informatik Formale Sprachen 1.2 Grammatiken formaler Sprachen
2. Kommunikation und Synchronisation von Prozessen 2
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
Imperativ.
Dynamische Prioritäten Statische Prozess-Prioritäten sind sinnvoll, falls Prozesse in wenige Klassen einteilbar (3.3.3) Dynamische Prioritäten.
Threads in Java Threads  Sprachumfang von Java Der Java-Standard fordert nur die Unterstützung von Thread-Prioritäten. Es gibt keine Forderung bzgl.:
Parallel Programming Semaphores / Reader - Writer - Lock
Schleifen mit der Turtle
Abstrakte Klassen und das Interface-Konzept
Lernstraße.
Pointer. Grundsätzliches: Im Arbeitsspeicher werden Daten gespeichert. Um auf die Daten eindeutig zugreifen zu können, werden diesen Daten Adressen zugeordnet.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
Praktische Informatik 1
Graphen.
Konstruktoren.
Venusspiegel und Marsschild
Zwei Denkansätze zur Klasse Schlange
Wiederholungen mit Zähler
Aufgaben Semaphore Übersicht (Dijkstra)
6. Wiederholungen und Zählschleifen
Programmierung und Vererbung in Java
Grundkurs Informatik mit Java
Es gibt Klassen, die mit der Entwicklungsumgebung ausgeliefert werden
Ein Referat von Sabrina Vissel, darleen paul und yannick fuchs
Implementieren von Klassen
Vererbung in Java Von Jan und Eddi.
 Präsentation transkript:

Der kritische Abschnitt

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.

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.

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.

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.

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.