Thread Synchronisierung

Größe: px
Ab Seite anzeigen:

Download "Thread Synchronisierung"

Transkript

1 Synchronisierung Interaktion zwischen s Kritischer Bereich und gegenseitiger Ausschluss Das Erzeuger-Verbraucher Schema mit und ohne Warteschlange Deadlocks Einführung 2 von 46 Interagierende s Zwei oder mehrere s laufen nicht unabhängig voneinander, sie interagieren Sie brauchen z.b. dieselbe Ressource oder dieselbe Variable konkurrieren Der eine wartet z.b. auf Daten eines anderen s kooperieren Konkurrieren Lösungsansatz Es muss sichergestellt werden, dass nur einer zu einem Zeitpunkt "dran" ist Kooperieren Lösungsansatz Es braucht einen Mechanismus, um einem anderen eine "Nachricht" zu übermitteln, dass der Verarbeitungsschritt/die Verarbeitung abgeschlossen ist. z.b. join um zu "signalisieren", dass der beendet wurde. wait -> wartet auf "Nachricht" von anderem nach Zustandswechsel (später) Konkurrierende s Gegenseitiger Ausschluss 3 von 46 4 von 46

2 Konkurrierende s Beispiel konkurrierende s: Beispiel Zähler class Konto { private double kontostand; Konto (double x) { kontostand x; einzahlen abheben Zwei s greifen auf eine gemeinsame Variable zu Sie verändern dessen Wert unabhängig voneinander Sie "konkurrieren" um die Variable Bereich in der auf solche Variablen zugegriffen wird, wird als kritischer Abschnitt bezeichnet void einzahlen(double x) { kontostand kontostand + x; Wechsel Wechsel void abheben(double x) { kontostand kontostand - x; Zähler- Zähler- z1 z1 for(25 for(25 mal){ mal){ x x sv.getandinccount(); sv.getandinccount(); Ausgabe Ausgabe (x); (x); Kritischer Abschnitt Kritischer Abschnitt SharedVars SharedVars sv sv int int count0; count0; int int getandinccount(){ getandinccount(){ int int i i count; count; sleep(1); sleep(1); count count i+1; i+1; return return i; i; Zähler- Zähler- z2 z2 for(25 for(25 mal){ mal){ x x sv.getandinccount(); sv.getandinccount(); Ausgabe Ausgabe (x); (x); absichtliche Verstärkung des absichtliche Verstärkung des Problems: Zwischen dem Lesen und Problems: Zwischen dem Lesen und Schreiben der var count greift der Schreiben der var count greift der andere auf die gleiche, noch andere auf die gleiche, noch unveränderte Variable count, zu! unveränderte Variable count, zu! 5 von 46 6 von 46 konkurrierende s Gegenseitiger Ausschluss. Beispiel 1: Zähler (nicht im Script!) Erwünschte Ausgabe: Zaehler 1, x0 Zaehler 2, x1 Zaehler 1, x2 Zaehler 2, x3 Zaehler 1, x4 Zaehler 2, x5 Zaehler 2, x6 Zaehler 2, x7 Zaehler 1, x8 Zaehler 2, x9 Zaehler 1, x10 Zaehler 2, x11 Zaehler 1, x12 Zaehler 2, x13 Zaehler 1, x14 Zaehler 2, x15... Die gemeinsame Variable soll immer Die gemeinsame Variable soll immer erhöht werden und jeder Wert nur erhöht werden und jeder Wert nur einmal dargestellt, egal, welcher einmal dargestellt, egal, welcher zugreift zugreift tatsächliche Ausgabe: Zaehler 2, x0 Zaehler 1, x0 Zaehler 1, x1 Zaehler 2, x1 Zaehler 1, x2 Zaehler 2, x2 Zaehler 1, x3 Zaehler 2, x3 Zaehler 2, x4 Zaehler 1, x4 Zaehler 2, x5 Zaehler 1, x5 Zaehler 2, x6 Zaehler 1, x6 Zaehler 1, x7 Zaehler 2, x7... Falsch! Probleme durch sich konkurrierende s wie vorhin beschrieben müssen in Programmen verhindert werden Prinzipielle Idee: man definiert kritische Bereiche, in denen zu jedem Zeitpunkt höchstens ein sein darf Gegenseitiger Ausschluss Mutual Exclusion (Mutex) Tritt ein in einen solchen Bereich ein, so darf der nächste erst eintreten, wenn der erste den Bereich verlassen hat (muss warten) Die getandinccount, einzahlen, abheben Methoden sind solcher kritische Bereiche 7 von 46 8 von 46

3 Kritischer Bereich In Java kann mit synchronized eine Methode als kritischer Bereich definiert werden Implementation ZählerZ class ZaehlerTest { class ZaehlerTest { static void main(string[] args) { static void main(string[] args) { // Vars auf die beide s zugreifen können // Vars auf die beide s zugreifen können SharedVars sharedvar new SharedVars(); SharedVars sharedvar new SharedVars(); // s kreieren und Starten // s kreieren und Starten Zaehler z1 new Zaehler(1, sharedvar); Zaehler z1 new Zaehler(1, sharedvar); Zaehler z2 new Zaehler(2, sharedvar); Zaehler z2 new Zaehler(2, sharedvar); z1.start(); z1.start(); z2.start(); z2.start(); Lösung: Lösung: synchronize synchronize exklusiver exklusiver Zugriff Zugriff auf auf die die Methode Methode getandinccount getandinccount synchronized int getandinccount() Damit funktionieren beide Beispiele auch mit sleep richtig 9 von 46 class Zaehler extends { class SharedVars { class Zaehler extends { class SharedVars { int zahlerid; private int count0; int zahlerid; private int count0; int x; int x; SharedVars sv; // Referenz auf Objekt mit shared Vars SharedVars sv; // Referenz auf Objekt mit shared Vars synchronized int getandinccount(){ int getandinccount(){ Zaehler(int id, SharedVars s) { // Constructor int i count; Zaehler(int id, SharedVars s) { // Constructor int i count; zahlerid id; // für die Ausgabe // Um Fehler zu provozieren zahlerid id; // für die Ausgabe // Um Fehler zu provozieren sv s; // Referenz auf das Shared-Object.sleep(1); sv s; // Referenz auf das Shared-Object.sleep(1); catch (Exception e ){; catch (Exception e ){; count i+1; count i+1; void run(){ return i; void run(){ return i; for (int i0; i<25;i++){ for (int i0; i<25;i++){ x sv.getandinccount(); x sv.getandinccount(); System.out.println("Zaehler "+ System.out.println("Zaehler "+ zahlerid+", i "+i+", x"+x); zahlerid+", i "+i+", x"+x); 10 von 46 Monitor Bei einer synchronized Methode passiert in Java folgendes: Es wird für das entsprechende Objekt ein sog. Monitor erzeugt Regel: es darf sich jeweils nur ein im Monitor befinden Die synchronized Methoden sind die Eingänge in den Monitor Der Monitor verwaltet einen Lock/Warteschlange für das Objekt (Objekt wird zu Monitor) Warteschlange Warteschlange read(data) read(data) write(data) write(data) (Monitor-)Objekt Geschützte Geschützte Daten Daten Monitor running/ running/ runnable runnable locked unlock Lock/Sperre Lock/Sperre für für alle alle anderen anderen synchronized blocked blocked Geschützte Geschützte Daten Daten Nur ein darf sich gleichzeitig im Monitor befinden Alle andern müssen warten, d.h. werden in Warteschlange eingeordnet Falls der (eine) die Methode verlässt kommt der nächste wartende dran etc. Bemerkungen: Ein Monitor pro Objekt befindet ein sich einmal im Monitor können beliebige andere synchronized Methoden aufgerufen werden Alle andern (nicht synchronized) Methoden der Klasse können beliebig aufgerufen werden Generell: synchronized-bereiche sind möglichst klein zu halten (gegenseitige -Blockierung Minderung der Recheneffizienz) 11 von von 46

4 Beispiel Clock (Version 1 mit TickTock1) Kooperierende s Synchronisierung TickTock-Objekt: verwaltet das Tick-Signal () und regelt den Zugriff darauf via zwei synchronized Methoden tick() und waitfortick() Minute- (Konsument): wartet auf Signal (Aufruf von waitfortick()) vom Sekunde- und zählt die Minuten hoch Sekunde- (Produzent): zählt bis 60 Sekunden und gibt dann ein Signal (Aufruf von tick()) an den Minute boolean ; boolean ; 13 von von 46 Version 1 mit TickTock1: Quellcode Zwei Probleme mit der 1. Version der Uhr Run-Methode Run-Methode des des s s Second Second void run() { void run() { while (true) { while (true) {.sleep(1000); // 1 Sek. warten.sleep(1000); // 1 Sek. warten catch catch (InterruptedException (InterruptedException e) e) { { if if (seconds (seconds 59) 59) { // nach 60 Sek { // nach 60 Sek minutetick.tick(); // Tick-Signal senden minutetick.tick(); // Tick-Signal senden seconds 0; // Sek. zuruecksetzen seconds 0; // Sek. zuruecksetzen else else {seconds++; {seconds++; screen.display(seconds screen.display(seconds + + " " Sekunden",10,20); Sekunden",10,20); Run-Methode Run-Methode des des s s Minute Minute void run() { void run() { while (true) { while (true) { minutetick.waitfortick(); // Auf Tick warten minutetick.waitfortick(); // Auf Tick warten if if (minutes (minutes 59) 59) { { minutes minutes 0; // Nach 1h Minuten zuruecksetzen 0; // Nach 1h Minuten zuruecksetzen else else {minutes++; {minutes++; screen.display(minutes screen.display(minutes + + " " Minuten",10,60); Minuten",10,60); class class TickTock1 TickTock1 implements implements TickTock TickTock { { private private boolean boolean false; false; // // Signal-Variable Signal-Variable synchronized synchronized void void waitfortick() waitfortick() { { while while (!){; (!){; // // wartet wartet bis bis true true false; false; synchronized synchronized void void tick() tick() { Busy-wait-Schleife; { Busy-wait-Schleife; true; true; 1. waitfortick() ist als Busy-Wait implementiert: while(!) {; // leere Busy-Wait-Schleife ständige CPU Auslastung durch den wartenden sollte vermieden werden 2. Programm hängt sich nach 59 Sekunden auf wieso? Minute- ruft waitfortick() auf und wartet in dieser synchronized Methode Sekunde- kann die synchronized Methode tick() gar nie mehr aufrufen ist blockiert Deadlock (später) 15 von von 46

5 Lösung: Schlafen und Wecksignale wait Anstatt einer aktiver Busy-Wait-Schleite legt sich der blockierte im Monitor schlafen wait() Solange er schläft, dürfen andere s den Monitor betreten Wenn ein anderer die Signal-Variable verändert hat, kann er einen der schlafenden s wecken, damit er den Schlaf-Grund überprüfen kann notify () Die Klasse Object stellt Methoden wait() und notify()/notifyall() zur Verfügung Beziehen sich immer auf das Objekt, in dem sie erzeugt wurden Dürfen nur innerhalb eines synchronized Programmteil aufgerufen werden (wenn ein das Monitor betreten hat) ; d.h. ein kann sich innerhalb des Monitors schlafen legen und solange er schläft, dürfen andere s den Monitor betreten in waitin wait- Zustand Zustand read(data) read(data) write(data) write(data) synchronized Monitor-Objekt Geschützte Geschützte Daten Daten Der, der wait() aufruft, legt sich schlafen (Zustand blocked) bezüglich des Objekts, in dem er wait() aufruft läuft erst weiter, wenn er wieder geweckt wird (durch notify() oder notifyall() von einem anderen ) verbraucht keine CPU-Zeit begibt sich in die Warteschlange des Objekts, in dem er sich befindet andere s können synchronized Bereiche des Objekts verwenden Nach dem Aufwecken muss der zuerst selbst wieder den an die Reihe kommen d.h. versuchen Monitor zu betreten 17 von von 46 notify notifyall notify(): erzeugt ein Wecksignal im Objekt, in welchem notify() aufgerufen wird notifyall() weckt alle im Objekt schlafende s auf sicherer, aber verbraucht mehr Rechenleistung. Schläft kein bezüglich des Objekts, so passiert nichts Schläft ein bezüglich des Objekts, so wird dieser geweckt (Zustand wird runnable) Schlafen mehrere s bezüglich des Objekts, so wird irgendeiner von diesen geweckt Ein aufgeweckter wird wie alle anderen nicht blockierten s irgendwann wieder CPU-Zeit erhalten und im Programm nach dem wait()- Aufruf weiterfahren wenn man (einfaches) Notify verwendet, kann es im Fall von mehreren wartenden s zu sog. race conditions kommen. Vergleiche auch race conditions in der Elektrotechnik, z.b. bei Flip-Flops Um die zu vermeiden man überprüft in einer Schleife immer wieder die Variable (in einer synchronized Methode) Falls nicht gewünschter Wert, dann legt man sich wieder schlafen (wait) derjenige der die Variable setzt weckt alle schlafenden s auf (notifyall); der erste der an die Reihe kommt setzt die Variable gleich zurück alle andern aufgeweckten s legen sich gleich wieder schlafen 19 von von 46

6 Monitor: Wait und Notify TickTock2 running/ running/ runnable runnable wait() notify() blocked blocked Minute verwendet wait() "öffnet" Monitor für andere Sekunde hat weiterhin Zugang zum Monitor und kann setzen (+notify) wait notify Jedes Objekt hat eine Warteschlange wait() fügt den aktuellen in die Warteschlange des Objektes ein notify() weckt den ersten in der Warteschlange notifyall() weckt alle s der Warteschlange Beachte: Bei der Version 2. wartet der Second - jedoch nicht, bis der Konsument ( Minute - ) das Tick-Signal abgeholt hat. Dies spielt in diesem Fall keine Rolle. 21 von von 46 TickTock2 TickTock2 class TickTock2 implements TickTock { private boolean false; synchronized void waitfortick() { while (!){ wait(); catch (InterruptedException e) { System.err.println("Exception"); false; Ist false Ist false schlafen legen und lock frei machen(wait()) schlafen legen und lock frei machen(wait()) synchronized void tick() { true; notifyall(); Sekunde- setzt true und führt notify() aus, um Sekunde- setzt true und führt notify() aus, um einen allfällig schlafenden aufzuwecken einen allfällig schlafenden aufzuwecken waitfortick(): Ist false, so wartet der Minute- (wait()) tick(): Sekunde- setzt true und führt notify() aus, um einen allfällig schlafenden aufzuwecken race Conditions in waitfortick(): Wieso nicht: if (!) { wait();... Würde hier zwar funktionieren, ist im Allgemeinen aber nicht garantiert! Falls mehrere s warten kann die Bedingung wieder false werden, bevor der an der Reihe ist Generell immer die while-variante verwenden 23 von von 46

7 Reservationsschema TickTock3 eine einmalig verfügbare Ressource wird von mehreren s geteilt wenn ein die Ressource belegt hat, dann müssen alle andern warten der gibt am Schluss die Ressource wieder frei Boolean inuse false; void synchronized waitforressource(){ while (inuse){ wait(); catch (InterruptedException e) { inuse true; void synchronized releaseressource(){ inuse false; notify(); Theoretisch gibt es ein weiteres Problem: wenn Minuten- zu langsam Minuten-Tick kann verloren gehen Gegenseitige Synchronisation notwendig: der Sekunde- wartet zusätzlich, bis der Minute- das Tick-Signal abgeholt hat Damit ist der Sekunde- sicher, dass der Minute- nachkommt Minute- wartet, bis Sekunden- das Produkt bereitstellt. Sekunden- wartet bis, bis Minuten- das Produkt abgeholt hat, bevor er das neue bereitstellt. Dies entspricht der sauberen und vollständigen Lösung des Erzeuger- Verbraucher Schemas (später) 25 von von 46 TickTock3 class TickTock3 implements TickTock { // Vollständige Lösung des Produzent-Konsument-Problems private boolean false; synchronized void waitfortick() { // wartet auf Nachricht while (!){ wait(); // warte auf catch (InterruptedException e) { System.err.println("Exception"); // hier Produkt abnehmen false; notifyall(); synchronized void tick() { // wartet bis abgeholt while(){ wait(); // warte bis Konsument abgeholt hat catch (InterruptedException e) { System.err.println("Exception"); // hier Produkt bereitstellen true; notifyall(); neu in der Version 3 neu in der Version 3 gleich wie in der Version 2 gleich wie in der Version 2 Erzeuger-Verbraucher Producer-Consumer 27 von von 46

8 Erzeuger-Verbraucher Erzeuger-Verbraucher Anwendungen wartet bis etwas fertig (erzeugt, berechnet, etc) wurde 1: Produzent while(true){ Item produzieren; Warten, bis letztes Elem. abgeholt; Gemeinsames Objekt blockieren; Elem. bereitstellen; Gemeinsames Objekt freigeben; Konsument wecken; 2: Konsument while(true){ Warten, bis nächstes Elem. produziert ist Gemeinsames Objekt blockieren; Elem. abholen; Gemeinsames Objekt freigeben; Produzent wecken; Beispiel von kooperierenden s Klassisches Beispiel: Erzeuger-Verbraucher Schema Platz für ein Datenelement: Ein (Produzent) erzeugt Daten für einen anderen (Konsument) Der Konsument holt die Daten ab, muss aber warten, bis diese bereit sind Hat der Produzent die Daten erzeugt, so muss er ebenfalls warten, bis der Konsument die Daten abgeholt hat und kann erst dann wieder produzieren Dadurch kann der Produzent den Konsumenten nicht mit Daten überfluten Beispiel: Uhr Produzent Produzent Ein zählt die Sekunden, ein anderer die Minuten Daten- Daten- Buffer Buffer (gemeins.. (gemeins.. Objekt) Objekt) Konsument Konsument Nach jeweils 60 Sekunden schickt der erste dem zweiten ein tick-signal, wodurch der zweite eine Minute weiter zählt Kommunikation via ein gemeinsames Objekt (TickTock) Sekunden Erzeuger Minuten Verbraucher 29 von von 46 Erzeuger-Verbraucher mit Buffer Erzeuger-Verbraucher mit Buffer Beispiel: Simulation eines Restaurants Bestellung 5 Bestellung 5 Bestellung 4 Bestellung 4 Bestellung 3 Bestellung 3 Bestellung 2 Bestellung 2 Bestellung 1 Bestellung 1 Anwendungen Computer erzeugt Daten - Drucker verbraucht Daten Netzwerk erzeugt Daten - Browser verbraucht Daten Erzeuger und Verbraucher verarbeiten Daten unregelmässig Beschreibung Kellnerin schreibt Bestellungen auf einen Zettel und hängen diesen an ein Anschlagbrett Der Koch nimmt jeweils eine Bestellung ab und verarbeitet sie Es hat nur bestimmt Anzahl Plätze für Bestellungen am Anschlagbrett; ggfs. müssen Gäste also warten, bis wieder ein Platz frei wird. Implementierung: Anschlagbrett wird durch eine Warteschlange (Queue) simuliert Array mit Strings Guest-: jede Sekunde eine Bestellung in die Warteschlange Koch-: nimmt vorderste Bestellung aus der Warteschlange und verarbeitet diese, Verarbeitungszeit 1 Sekunde Produzent Produzent 1: Produzent while(true){ Item produzieren; Warten, bis Platz in Buffer Gemeinsames Objekt blockieren; Item zu Warteschlange hinzufügen Gemeinsames Objekt freigeben; Konsument wecken; Daten-Buffer Daten-Buffer Warteschlange Warteschlange 2: Konsument while(true){ Warten, bis Buffer nicht leer Gemeinsames Objekt blockieren; Item aus Warteschlange holen; Gemeinsames Objekt freigeben; Produzent wecken; Konsument Konsument 31 von von 46

9 Erzeuger-Verbraucher mit Buffer Der Ringbuffer FIFO Grundsätzlich wie ohne Warteschlange mit folgenden Änderungen: Es gibt eine gemeinsame Warteschlange Der Produzent füllt Daten in die Warteschlange Der Konsument holt Daten aus der Warteschlange Der Produzent muss nur warten, wenn die Warteschlange voll ist Der Konsument muss nur warten, wenn die Warteschlange leer ist kann z.b. mit einer Zählvariable kontrolliert werden 33 von 46 n-1 0 outindex inindex Meist verwendete Datenstruktur für Buffer Initialisierung: private int size; private int inindex 0; private int outindex 0; private int noofitems 0; private String[] content; class Buffer /* FIFO */{ Buffer(int s) {size s; content new String[s]; synchronized void put(string s) { while (noofitems size) { wait(); catch (InterruptedException e) { content[inindex] s; inindex (inindex+1) % size; noofitems++; notifyall(); synchronized String get() { while (noofitems 0) { wait(); catch (InterruptedException e) { String s content[outindex]; outindex (outindex+1) % size; noofitems--; notifyall(); return s; 34 von 46 Erzeuger-Verbraucher mit Buffer Analyse der Pizzeria-Simulation Erzeuger class Producer extends { Producer (String n, String[] production, Buffer buf, int s) { name n; buffer buf; items production; speed s; void run() { for (int i0 ; i<items.length ; i++) { System.out.println (name + " producing..."); buffer.put(items[i]); private String[] items; private String name; private Buffer buffer; Verbraucher class Consumer extends { Consumer (String n, Buffer buf, int s) { name n; buffer buf; speed s; void run() { while (true) { String s buffer.get(); if (s.equals("")) break; System.out.println(name + " consuming \"" + s + '\"'); private String name; private Buffer buffer; 35 von Fall: Queue ist weder voll noch leer Guest/Koch werden in enter/remove werden nie wait() aufrufen Wecksignale (notify()) am Ende werden ignoriert 2. Fall: Queue ist leer remove vom Koch- wird wait()aufrufen wartet auf Wecksignal enter vom Guest- wird kein wait() aufrufen Wecksignal vom Guest- wird Koch- aufwecken, dieser kann weiterlaufen nachdem der Guest- die remove-methode verlassen hat 3. Fall: Queue ist voll enter vom Guest- wird wait()aufrufen wartet auf Wecksignal enter vom Koch- wird kein wait() aufrufen Wecksignal vom Koch- wird Guest- aufwecken, dieser kann weiterlaufen nachdem der Koch- die enter-methode verlassen hat 36 von 46

10 Der Stack LIFO class Stack /* LIFO */ { int[10] buffer; int anz0; synchronized void put(int x) { while(anz10) wait(); catch(interrubtedexception e){return; buffer[anz]x; anz++; notifyall(); das letzte Element, das eingegeben wurde wird zuerst retourniert synchronized void get() { while(anz0) wait(); catch(interrubtedexception e){return; int xbuffer[anz]; anz--; notifyall(); return(x); Verklemmung, Deadlock 37 von von 46 Deadlock Verklemmung: Dead Lock Wenn sich s gegenseitig blockieren spricht man von einem Deadlock Auch im echten Leben solche Situationen werden mit "Intelligenz" gelöst Blockieren bedeutet hier nicht kurzfristig blockieren (wie z.b bei wait/notify), sondern unauflösbar blockieren Deadlocks müssen immer dann in Betracht bezogen werden, wenn verschiedene s auf gemeinsame Ressourcen zugreifen Gehören zu den häufigsten Problemen beim multi-threaded Programmieren Beispiel: 1. Fall der Uhr: Minute_ macht Busy-Wait in der synchronized Methode waitfortick() und behält den Lock Sekunde- kann deshalb die synchronized Methode tick() nicht ausführen, welche das Busy-Wait beenden würde Konnte mit einem wait/notify einfach gelöst werden Dining Philosophers 39 von von 46

11 KlassischerDeadlock: Dining Philosophers Deadlock Situation 5 Philosophen, die denken und essen, sitzen an einem runden Tisch Zum Essen braucht ein Philosoph 2 Essstäbchen (Gabeln) Insgesamt gibt es nur 5 Essstäbchen Wer essen will, nimmt zuerst die linke, dann die rechte Essstäbchen Ist ein Essstäbchen besetzt, so wartet er, bis sie frei wird Wie kann hier ein Deadlock auftreten? ja: alle haben das linke Essstäbchen in der Hand Alle s warten auf die Freigabe einer Ressource, die ein anderer reserviert hat Es blockieren sich alle gegenseitig Generelles Muster: Teil der Ressourcen werden gehalten Anderer Teil ist blockiert (werden von anderen s gehalten) Lee braucht noch Wang hat hat 41 von von 46 Lösungen Strategien zur Vermeidung von Deadlocks Deadlocks auflösen angeforderte Ressource nach einer gewissen Zeit wieder frei geben und (gleich) erneut probieren führt ev. nicht zu Ziel schwierig (wie lange soll man warten) Nur eine Ressource anfordern -> keine Problem Problem nur, wenn mehrere Ressourcen inkrementel angefordert werden man hat die eine und wartet auf andere Deadlocks erst gar nicht aufkommen lassen Deadlocks vermeiden Z.B. Ein Philosoph verhält sich anders und nimmt erst die rechte, dann die linke Stächen es können nicht alle genau ein Stäbchen in der Hand halten ein Deadlock ist nicht möglich Haben Sie einen anderen Lösungsvorschlag für das Problem? Mögliche Strategien: nicht inkrementel anfordern Strategie 1 Alle Ressourcen gleich am Anfang anfordern Nachteil: zu lange blockiert, Strategie 2 Programmverlaufabhängigkeiten nicht berücksichtigt Alle Ressourcen auf einen Schlag anfordern Nachteil: länger blockiert als nötig Programmverlaufabhängigkeiten nur teilweise berücksichtigt 43 von von 46

12 ...Strategien zur Vermeidung von Deadlocks Zusammenfassung Synchronisierung Strategie 3 mit inkrementel angeforderter Ressourcen wenn nicht alle bekommen -> Ressourcen wieder freigeben und neu versuchen Nachteil: das "Spielchen" kann unendlich lange dauern Lee S1, S2 Wang S2, S1 braucht Lee noch Wang hat hat S1 S2 Verfeinerungen der Strategie 3 falls es nicht geklappt hat, eine zufällige Zeit lang warten z.b. TCP/IP CSCD Protokoll Interagierende s Konkurrierende-> synchronized Kooperierende -> wait(), notify(),notifyall Deadlocks Strategie 4 Alle fordern die Ressourcen in der gleichen Reihenfolge an bewährt und einfach wenn Reihenfolge definierbar 45 von von 46

Parallele Prozesse. Prozeß wartet

Parallele Prozesse. Prozeß wartet Parallele Prozesse B-66 Prozeß: Ausführung eines Programmes in seinem Adressraum (zugeordneter Speicher) Parallele Prozesse: gleichzeitig auf mehreren Prozessoren laufende Prozesse p1 p2 verzahnte Prozesse:

Mehr

Übung zu Grundlagen der Betriebssysteme. 10. Übung 18.12.2012

Übung zu Grundlagen der Betriebssysteme. 10. Übung 18.12.2012 Übung zu Grundlagen der Betriebssysteme 10. Übung 18.12.2012 Aufgabe 1 a) Was versteht man unter einem kritischen Abschnitt oder kritischen Gebiet (critical area)? b) Welche Aufgabe hat ein Semaphor? c)

Mehr

Betriebssysteme. G: Parallele Prozesse. (Teil B: Klassische Problemstellungen, Mutual Exclusion, kritische Regionen)

Betriebssysteme. G: Parallele Prozesse. (Teil B: Klassische Problemstellungen, Mutual Exclusion, kritische Regionen) Betriebssysteme G: Parallele Prozesse (Teil B: Klassische Problemstellungen, Mutual Exclusion, kritische Regionen) 1 Allgemeine Synchronisationsprobleme Wir verstehen ein BS als eine Menge von parallel

Mehr

Nebenläufigkeit mit Java

Nebenläufigkeit mit Java Nebenläufigkeit mit Java Einheit 03: Synchronisation Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda Synchronisation von Threads Locks Java Monitor-Konzept Lock Freigabe Zusammenspiel

Mehr

Ausnahmebehandlung in Java

Ausnahmebehandlung in Java Ausnahmebehandlung in Java class A { void foo() throws Help, SyntaxError {... class B extends A { void foo() throws Help { if (helpneeded()) throw new Help();... try {... catch (Help e) {... catch (Exception

Mehr

Thread-Synchronisation in in Java. Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen

Thread-Synchronisation in in Java. Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen Thread-Synchronisation in in Java Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen Die Klasse Thread Die Die Klasse Thread gehört zur zur Standardbibliothek von von

Mehr

Verteilte Systeme CS5001

Verteilte Systeme CS5001 Verteilte Systeme CS5001 Th. Letschert TH Mittelhessen Gießen University of Applied Sciences Client-Server-Anwendungen: Vom passiven (shared state) Monitor zum aktiven Monitor Monitor (Hoare, Brinch-Hansen,

Mehr

Vorlesung Informatik II

Vorlesung Informatik II Vorlesung Informatik II Universität Augsburg Wintersemester 2011/2012 Prof. Dr. Bernhard Bauer Folien von: Prof. Dr. Robert Lorenz Lehrprofessur für Informatik 17. JAVA Kommunikation von Threads 1 Motivation

Mehr

Informatik B. Vorlesung 8 Synchronisierung von Threads. Dr. Ralf Kunze

Informatik B. Vorlesung 8 Synchronisierung von Threads. Dr. Ralf Kunze Vorlesung 8 Synchronisierung von Threads 1 Rückblick Threads Erzeugen, Starten und Stoppen Fehler abfangen Gemeinsamer Zugriff auf Ressourcen Kritische Blöcke (Einleitung) 2 Kritische Blöcke Kritische

Mehr

Beispiel für überladene Methode

Beispiel für überladene Methode Beispiel für überladene Methode class Gras extends Futter {... abstract class Tier { public abstract void friss (Futter x); class Rind extends Tier { public void friss (Gras x) {... public void friss (Futter

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung Ausnahmebehandlung und Nebenläufigkeit 9. Vorlesung am 15. Dezember 2010 Ausnahmebehandlung in Java class A { void foo() throws Help, SyntaxError {... class B extends A

Mehr

Lebenszyklus von Threads

Lebenszyklus von Threads Threads Umgangssprachlich Faden, Diskussionsfaden, Gewinde, Faser, Garn, roter Faden Threads ermöglichen Nebenläufigkeit (parallele Ausführung von Anwendungsteilen). Typisch für Threads ist,dass sie zu

Mehr

parallele Prozesse auf sequenziellen Prozessoren Ein Process ist ein typisches Programm, mit eigenem Addressraum im Speicher.

parallele Prozesse auf sequenziellen Prozessoren Ein Process ist ein typisches Programm, mit eigenem Addressraum im Speicher. Threads parallele Prozesse auf sequenziellen Prozessoren Prozesse und Threads Es gibt zwei unterschiedliche Programme: Ein Process ist ein typisches Programm, mit eigenem Addressraum im Speicher. Ein Thread

Mehr

Einführung in die Programmierung Blockkurs Java

Einführung in die Programmierung Blockkurs Java Michael Bader 19. 25. Februar 2003 Freitag Inhaltsübersicht Exceptions und Errors Ausnahmebehandlung: try/catch/finally Threads Zugriffskontrolle bei gemeinsamen Variablen: synchronized, wait(), notify()

Mehr

Wirtschaftsinformatik II Sommersemester Lo sungshinweise zu den Ü bungen P. Mandl, M. Dolag, B. Rottmüller, et al.

Wirtschaftsinformatik II Sommersemester Lo sungshinweise zu den Ü bungen P. Mandl, M. Dolag, B. Rottmüller, et al. Wirtschaftsinformatik II Sommersemester 2016 Lo sungshinweise zu den Ü bungen 2-6 @Prof. P. Mandl, M. Dolag, B. Rottmüller, et al. Seite 1 / 6 Übung 2 Verwendung von Java-Threads Ableitung von Klasse Thread

Mehr

Prozesszustände (1a)

Prozesszustände (1a) Prozesszustände (1a) NOT EXISTING DELETED CREATED Meta-Zustand (Theoretische Bedeutung) Prozesszustände Multiuser Umfeld (1c) Hintergrund-Prozess - der Prozess startet im Hintergrund - my-commandbin &

Mehr

Leser-Schreiber-Realisierung mit Semaphoren

Leser-Schreiber-Realisierung mit Semaphoren Leser-Schreiber-Realisierung mit Semaphoren Reader: down(semwriter); down(semcounter); rcounter++; up(semwriter); read(); down(semcounter); rcounter--; Writer: Problem: down(semwriter); Busy Waiting siehe

Mehr

Aufgabenblatt 8 Musterlösung

Aufgabenblatt 8 Musterlösung Prof. Dr. rer. nat. Roland Wismüller Aufgabenblatt 8 Musterlösung Vorlesung Betriebssysteme I Wintersemester 2017/18 Aufgabe 1: Erzeuger-Verbraucher Synchronisation (Bearbeitung in der Übungsstunde) Erzeuger-Verbraucher-Problem:

Mehr

PROG 2: Einführung in die Programmierung für Wirtschaftsinformatiker

PROG 2: Einführung in die Programmierung für Wirtschaftsinformatiker Multithreading PROG 2: Einführung in die Programmierung für Wirtschaftsinformatiker Steffen Helke Technische Universität Berlin Fachgebiet Softwaretechnik 10. Juni 2013 Übersicht Rückblick: Producer-Consumer-Problem

Mehr

Info B VL 17: Deadlocks

Info B VL 17: Deadlocks Info B VL 17: Deadlocks Objektorientiere Programmierung in Java 2003 Ute Schmid (Vorlesung) Elmar Ludwig (Übung) FB Mathematik/Informatik, Universität Osnabrück Info B VL 17: Deadlocks p.327 Conditional

Mehr

Threads Kritische Bereiche Reales Beispiel Deadlocks Wait/Notify. Programmieren II. Martin Schultheiß. Hochschule Darmstadt Sommersemester 2011

Threads Kritische Bereiche Reales Beispiel Deadlocks Wait/Notify. Programmieren II. Martin Schultheiß. Hochschule Darmstadt Sommersemester 2011 Programmieren II Martin Schultheiß Hochschule Darmstadt Sommersemester 2011 1 Threads 2 Kritische Bereiche 3 Reales Beispiel 4 Deadlocks 5 Wait/Notify Nebenläufigkeit Moderne Betriebssysteme unterstützen

Mehr

(b.) Welche Möglichkeit gibt es, die Methode run so zu verändern, dass Bora Bora IMMER zuletzt ausgegeben wird?

(b.) Welche Möglichkeit gibt es, die Methode run so zu verändern, dass Bora Bora IMMER zuletzt ausgegeben wird? Threads - Seite 1 Threads (1.) (a.) Nehmen Sie das Beispiel 2 von der Folie und ändern Sie dies ab, so dass sie z.b. ein Array von 100 Threads starten können! Testen Sie aber zunächst ihren Kode mit einem

Mehr

Aufgabe 9 Threads [12]

Aufgabe 9 Threads [12] Aufgabe 9 Threads [12] a) Teilaufgaben: Antworten u. Grafiken größtenteils den Vorlesungsfolien von A. Brüggemann-Klein entnommen. a. Erläutern Sie die Zustände ready, running, sleeping, dead, in denen

Mehr

Kapitel 6. Verklemmungen (Deadlocks)

Kapitel 6. Verklemmungen (Deadlocks) Seite 1 Kapitel 6 Verklemmungen (Deadlocks) Prof. Dr. Rolf Hennicker 16.06.2016 6.1 Charakterisierung von Deadlocks Seite 2 Eine Verklemmung entsteht, wenn alle Prozesse in einem System blockiert (d.h.

Mehr

Prozesse. Prozesse sind Programme. Prozesse können aus Unterprozessen bestehen. Prozesshierarchie Unterprozesse Threads

Prozesse. Prozesse sind Programme. Prozesse können aus Unterprozessen bestehen. Prozesshierarchie Unterprozesse Threads Threads Prozesse, Parallelität, Nebenläufigkeit, Threads, Erzeugung, Ausführung, Kommunikation, Interferenz, Kritischer Bereich, Deadlock, Synchronisation. Prozesse Prozesse sind Programme mehrere Prozesse

Mehr

Systeme I: Betriebssysteme Kapitel 5 Nebenläufigkeit und wechselseitiger Ausschluss. Wolfram Burgard

Systeme I: Betriebssysteme Kapitel 5 Nebenläufigkeit und wechselseitiger Ausschluss. Wolfram Burgard Systeme I: Betriebssysteme Kapitel 5 Nebenläufigkeit und wechselseitiger Ausschluss Wolfram Burgard Version 09.11.2016 1 Begrüßung Heute ist Tag der offenen Tür Willkommen allen Schülerinnen und Schülern!

Mehr

Synchronisation in Java. Invisible Web

Synchronisation in Java. Invisible Web Synchronisation in Java Studienprojekt Invisible Web Tang Zhihong Synchronisation in Java Synchronisationsproblem Monitore Wait und notify PipedInputStream und PipedOutputStream Synchronisation von Collections

Mehr

Wintersemester 2009/10 Helmut Seidl Institut für Informatik TU München

Wintersemester 2009/10 Helmut Seidl Institut für Informatik TU München Informatik2 Wintersemester 2009/10 Helmut Seidl Institut für Informatik TU München 1 0 Allgemeines Inhalt dieser Vorlesung: Nebenläufigkeit in Java; Funktionales Programmieren mit OCaml :-) 2 1 Threads

Mehr

Systeme I: Betriebssysteme Kapitel 5 Nebenläufigkeit und wechselseitiger Ausschluss. Maren Bennewitz

Systeme I: Betriebssysteme Kapitel 5 Nebenläufigkeit und wechselseitiger Ausschluss. Maren Bennewitz Systeme I: Betriebssysteme Kapitel 5 Nebenläufigkeit und wechselseitiger Ausschluss Maren Bennewitz Version 18.12.2013 1 Inhalt Vorlesung Aufbau einfacher Rechner Überblick: Aufgabe, Historische Entwicklung,

Mehr

Gegenseitiger Ausschluss 102

Gegenseitiger Ausschluss 102 Gegenseitiger Ausschluss 102 MX = M (P 1... P n ) M = (lock unlock M) P i = (lock begin_critical_region i end_critical_region i unlock private_work i P i ) n Prozesse P 1... P n wollen konkurrierend auf

Mehr

Liste Programmieren Java Überblick

Liste Programmieren Java Überblick Liste Programmieren Java Überblick 1 Was ist Java? 2 Klassen und Objekte 3 Vererbung 4 Schnittstellen 5 Innere Klassen 6 Exceptions 7 Funktionsbibliothek 8 Datenstrukturen und Algorithmen 9 Ein-/Ausgabe

Mehr

OOP: Nebenläufigkeiten Threads. Dipl.-Inform. Arnold Willemer

OOP: Nebenläufigkeiten Threads. Dipl.-Inform. Arnold Willemer OOP: Nebenläufigkeiten Threads Dipl.-Inform. Arnold Willemer arnold.willemer@hs-flensburg.de Schlafen für Profis Die C-64-Lösung kocht und blockiert den Prozessor while (!fertig) // nichts tun: busy waiting

Mehr

Informatik B - Objektorientierte Programmierung in Java. Vorlesung 21: Threads 2. Inhalt

Informatik B - Objektorientierte Programmierung in Java. Vorlesung 21: Threads 2. Inhalt Universität Osnabrück 1 wait und notify 3 - Objektorientierte Programmierung in Java Vorlesung 21: Threads 2 SS 2006 Prof. Dr. F.M. Thiesing, FH Osnabrück Neben dem Monitorkonzept stehen mit den Methoden

Mehr

Einführung in die Programmierung Blockkurs Java

Einführung in die Programmierung Blockkurs Java Michael Bader 8. 12. April 2002 Freitag Inhaltsübersicht Exceptions und Errors Ausnahmebehandlung: try/catch/finally Threads Zugriffskontrolle bei gemeinsamen Variablen: synchronized, wait(), notify()

Mehr

Programmieren II. Nebenläufigkeit. Vorlesung 9. Handout S. 1. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester Threads. Kritische Bereiche

Programmieren II. Nebenläufigkeit. Vorlesung 9. Handout S. 1. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester Threads. Kritische Bereiche Programmieren II Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2010 1 / 24 Threads Kritische Bereiche Reales Beispiel 2 / 24 Nebenläufigkeit Moderne Betriebssysteme unterstützen das Prinzip der

Mehr

Java I Vorlesung Nebenläufigkeit

Java I Vorlesung Nebenläufigkeit Java I Vorlesung 10 Nebenläufigkeit 28.6.2004 Threads Synchronisation Deadlocks Thread-Kommunikation Innere Klassen Anonyme Klassen Nebenläufigkeit http://java.sun.com/docs/books/tutorial/essential/threads/

Mehr

Institut fu r Informatik

Institut fu r Informatik Technische Universita t Mu nchen Institut fu r Informatik Lehrstuhl fu r Bioinformatik Einfu hrung in die Programmierung fu r Bioinformatiker Prof. B. Rost, L. Richter WS 2014/15 Aufgabenblatt 11 19.01.2015

Mehr

Programmierung mit Threads in Java

Programmierung mit Threads in Java Programmierung mit Threads in Java Harald Kosch and Matthias Ohlenroth Institut für Informationstechnologie Universität Klagenfurt H. Kosch Threads in Java 1 Inhalt Grundlagen: Threads und Datenlokalität

Mehr

JJ Prozesse und Nebenläufigkeit

JJ Prozesse und Nebenläufigkeit 1 Wiederholung: Algorithmus von Peterson boolean ready0=false, ready1=false; int turn=0; JJ Prozesse und Nebenläufigkeit (Auszug aus der Vorlesung) while( 1 ) Prozess 0 ready0 = true; turn = 1; while(

Mehr

leave: mov flag, 0 ; 0 in flag speichern: Lock freigeben ret

leave: mov flag, 0 ; 0 in flag speichern: Lock freigeben ret Sep 19 14:20:18 amd64 sshd[20494]: Accepted rsa for esser from ::ffff:87.234.201.207 port 61557 Sep 19 14:27:41 amd64 syslog-ng[7653]: STATS: dropped 0 Sep 20 01:00:01 amd64 /usr/sbin/cron[29278]: (root)

Mehr

Praktikum aus Softwareentwicklung 2, Stunde 5

Praktikum aus Softwareentwicklung 2, Stunde 5 Praktikum aus Softwareentwicklung 2, Stunde 5 Lehrziele/Inhalt 1. Threads Threads Threads sind parallele, oder auf Rechnern mit nur einer CPU quasi-parallele, Programmabläufe in Java. Sie können beispielsweise

Mehr

Das Monitorkonzept Brinch-Hansen

Das Monitorkonzept Brinch-Hansen Das Monitorkonzept (nach Hoare/Brinch Brinch-Hansen 1974) Nur ein Prozess bzw. Thread kann zu einem bestimmten Zeitpunkt im Monitor aktiv sein => gegenseitiger Ausschluss, mutual exclusion. Geschützte

Mehr

Fachhochschule Wedel 31. Januar 2004 Prof. Dr. Uwe Schmidt

Fachhochschule Wedel 31. Januar 2004 Prof. Dr. Uwe Schmidt Fachhochschule Wedel 31. Januar 2004 Prof. Dr. Uwe Schmidt Aufgaben zur Klausur C und Objektorientierte Programmierung im WS 2003/04 (WI h103, II h105, MI h353) Zeit: 150 Minuten erlaubte Hilfsmittel:

Mehr

Testen nebenläufiger Objekte

Testen nebenläufiger Objekte Testen nebenläufiger Objekte Threads in Java Julian Lambertz Seminar Tests in Informatik und Statistik im SS 2004 Universität Ulm J.L., Juni 2004 1 Themenüberblick Einleitung Begriff der Nebenläufigkeit

Mehr

Lösungsvorschläge zur Nachklausur zum Kurs 1618 Sommersemester 2001 am

Lösungsvorschläge zur Nachklausur zum Kurs 1618 Sommersemester 2001 am Aufgabe 1 Lösungsvorschläge zur Nachklausur zum Kurs 1618 Sommersemester 2001 am 16.3.2002 Folgende Implementierung löst die gestellte Aufgabe : public interface Figur { public void anzeigen (); public

Mehr

Javakurs für Fortgeschrittene

Javakurs für Fortgeschrittene Javakurs für Fortgeschrittene Einheit 07: Nebenläufigkeit Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda Einführung in die Nebenläufigkeit und Java Thread Konzept: Motivation

Mehr

Nebenläufige und verteilte Programme CS2301

Nebenläufige und verteilte Programme CS2301 Nebenläufige und verteilte Programme CS2301 Th. Letschert TH Mittelhessen Gießen University of Applied Sciences Monitorprogramme: Passive Monitore und aktive Threads Monitor-Anwendungen: Spezifikation

Mehr

Institut fu r Informatik

Institut fu r Informatik Technische Universita t Mu nchen Institut fu r Informatik Lehrstuhl fu r Bioinformatik Praktikum: Grundlagen der Programmierung Prof. B. Rost, L. Richter WS 2013-14 Aufgabenblatt 9 20. Januar Threads 9.1

Mehr

Proseminar Nichtsequentielle Programmiersprachen WS 2011/2012 Monitore

Proseminar Nichtsequentielle Programmiersprachen WS 2011/2012 Monitore Fachbereich Mathematik und Informatik Institut für Informatik Proseminar Nichtsequentielle Programmiersprachen WS 2011/2012 Monitore Sascha Kretzschmann 2. November 2011 Inhaltsverzeichnis 1 Einleitung

Mehr

Verkettete Datenstrukturen: Listen

Verkettete Datenstrukturen: Listen Verkettete Datenstrukturen: Listen 2 Listen Formal: Liste = endliche Folge von Elementen [a 1, a 2,..., a n ]. Spezialfall: leere Liste [ ]. Länge einer Liste = Anzahl der Elemente (bei leerer Liste: 0).

Mehr

Hans-Georg Eßer, Hochschule München Betriebssysteme I, SS Synchronisation (1) Folie 3

Hans-Georg Eßer, Hochschule München Betriebssysteme I, SS Synchronisation (1) Folie 3 Sep 19 14:20:18 amd64 sshd[20494]: Accepted rsa for esser from ::ffff:87.234.201.207 port 61557 Sep 19 14:27:41 amd64 syslog-ng[7653]: STATS: dropped 0 Sep 20 01:00:01 amd64 /usr/sbin/cron[29278]: (root)

Mehr

Info B VL 16: Monitore und Semaphoren

Info B VL 16: Monitore und Semaphoren Info B VL 16: Monitore und Semaphoren Objektorientiere Programmierung in Java 2003 Ute Schmid (Vorlesung) Elmar Ludwig (Übung) FB Mathematik/Informatik, Universität Osnabrück Info B VL 16: Monitore und

Mehr

Thread-Konzept in objektorientierten Programmiersprachen. Threads. Threads in Java

Thread-Konzept in objektorientierten Programmiersprachen. Threads. Threads in Java Thread-Konzept in objektorientierten Programmiersprachen 1 Threads ein Thread ist ein eigenständiges Programmfragment, das parallel zu anderen Teilen eines Programmes ablaufen kann alle Threads eines Programmes

Mehr

Verteilte Systeme. 2. Die Client-Server-Beziehung und daraus resultierende Techniken. 2.2 Nebenläufigkeitstechniken in Java

Verteilte Systeme. 2. Die Client-Server-Beziehung und daraus resultierende Techniken. 2.2 Nebenläufigkeitstechniken in Java VS22 Slide 1 Verteilte Systeme 2. Die Client-Server-Beziehung und daraus resultierende Techniken 2.2 Nebenläufigkeitstechniken in Java Sebastian Iwanowski FH Wedel VS22 Slide 2 Was ist Nebenläufigkeit?

Mehr

Nebenläufige und verteilte Programme CS2301

Nebenläufige und verteilte Programme CS2301 Nebenläufige und verteilte Programme CS2301 Th. Letschert TH Mittelhessen Gießen University of Applied Sciences Netze mit aktiven und reaktiven Knoten Produzent Konsument: aktiv / passiv / reaktiv

Mehr

JedesObjekt(mit ÝÒ ÖÓÒ Þ -Methoden)verfügtübereine. wartender Threads sowie die Objekt-Methoden:

JedesObjekt(mit ÝÒ ÖÓÒ Þ -Methoden)verfügtübereine. wartender Threads sowie die Objekt-Methoden: JedesObjekt(mit ÝÒ ÖÓÒ Þ -Methoden)verfügtübereine weitereschlange Ì Ö ÉÙ Ù Û Ø Ò Ì Ö amobjekt wartender Threads sowie die Objekt-Methoden: ÔÙ Ò ÚÓ Û Ø µ Ø ÖÓÛ ÁÒØ ÖÖÙÔØ Ü ÔØ ÓÒ ÔÙ Ò ÚÓ ÒÓØ Ý µ ÔÙ Ò ÚÓ

Mehr

#define N 5 // Anzahl der Philosophen. while (TRUE) { // Der Philosoph denkt

#define N 5 // Anzahl der Philosophen. while (TRUE) { // Der Philosoph denkt Sep 19 14:20:18 amd64 sshd[20494]: Accepted rsa for esser from ::ffff:87.234.201.207 port 61557 Sep 19 14:27:41 amd64 syslog-ng[7653]: STATS: dropped 0 Sep 20 01:00:01 amd64 /usr/sbin/cron[29278]: (root)

Mehr

Nebenläufigkeit mit Java

Nebenläufigkeit mit Java Nebenläufigkeit mit Java Einheit 02: Eigenschaften & kritische Abläufe Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda Eigenschaften von Threads Name, Priorität, Zustand Zustandsübergänge

Mehr

Philipp Güttler Progwerkstatt Letzte Änderung: Enums, Interfaces, Generics und Threads

Philipp Güttler Progwerkstatt Letzte Änderung: Enums, Interfaces, Generics und Threads Philipp Güttler 18.11.2008 Progwerkstatt Letzte Änderung: 09.12.2009 Enums, Interfaces, Generics und Threads Seite 2 Enums Enums, Interfaces und Generics 17.11.2008 Enum Typen komplexer Datentyp, der festen

Mehr

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 15 Parallele Programmierung... 15-2 15.1 Die Klasse java.lang.thread... 15-2 15.2 Beispiel 0-1-Printer als Thread... 15-3 15.3 Das Interface java.lang.runnable... 15-4 15.4 Beispiel 0-1-Printer

Mehr

Zur Erinnerung: Threads. Threadverwaltung. Threads: Prioritäten. Beispiel Flugbuchungsprogramm. Nichtdeterminismus

Zur Erinnerung: Threads. Threadverwaltung. Threads: Prioritäten. Beispiel Flugbuchungsprogramm. Nichtdeterminismus Zur Erinnerung: Threads Programmierung (fortgeschrittene Konzepte) Threads, Monitore, Semaphore und speisende en Wolf-Ulrich Raffel (uli@wuraffel.de) Möglichkeiten, Threads zu definieren Bildung einer

Mehr

Aufgabenblatt 6 Musterlösung

Aufgabenblatt 6 Musterlösung Prof. Dr. rer. nat. Roland Wismüller Aufgabenblatt 6 Musterlösung Vorlesung Betriebssysteme I Wintersemester 2018/19 Aufgabe 1: Implementierung von Threads (Bearbeitung zu Hause) Der größte Vorteil ist

Mehr

Betriebssysteme Theorie

Betriebssysteme Theorie Betriebssysteme Theorie SS 2011 Hans-Georg Eßer Dipl.-Math., Dipl.-Inform. Foliensatz D (05.05.2011) Synchronisation 05.05.2011 Betriebssysteme-Theorie, Hans-Georg Eßer Folie D-1 Einführung (1) Es gibt

Mehr

Beteiligte Typen (Auszug)

Beteiligte Typen (Auszug) Threads 1 Beteiligte Typen (Auszug) public sealed class Thread { public static Thread CurrentThread { get; public static void Sleep(int milliseconds) { public Thread(ThreadStart startmethod) { public string

Mehr

Einführung Verteilte Systeme - Java Threads III -

Einführung Verteilte Systeme - Java Threads III - Einführung Verteilte Systeme - Java Threads III - Prof. Dr. Michael Cebulla 04. Dezember 2014 Fachhochschule Schmalkalden Wintersemester 2014/15 1 / 45 M. Cebulla Verteilte Systeme Gliederung Wiederholung

Mehr

ALP II Dynamische Datenmengen Datenabstraktion

ALP II Dynamische Datenmengen Datenabstraktion ALP II Dynamische Datenmengen Datenabstraktion O1 O2 O3 O4 SS 2012 Prof Dr Margarita Esponda M Esponda-Argüero 1 Dynamische Datenmengen Dynamische Datenmengen können durch verschiedene Datenstrukturen

Mehr

Systeme I: Betriebssysteme Kapitel 5 Nebenläufigkeit und wechselseitiger Ausschluss. Maren Bennewitz

Systeme I: Betriebssysteme Kapitel 5 Nebenläufigkeit und wechselseitiger Ausschluss. Maren Bennewitz Systeme I: Betriebssysteme Kapitel 5 Nebenläufigkeit und wechselseitiger Ausschluss Maren Bennewitz Version 12.12.2012 1 Nachtrag zu letzter Vorlesung Hauptspeicher reicht nur für begrenzte Anzahl von

Mehr

Übung Betriebssysteme 11

Übung Betriebssysteme 11 Übung Betriebssysteme 11 Christian Motika Christian-Albrechts-Universität zu Kiel Institut für Informatik AG Echtzeitsysteme / Eingebettete Systeme Kiel, Germany 29-JAN-2013 CAU - WS 2012/13 Übung Betriebssysteme

Mehr

import java.applet.applet; import java.awt.*; public class Grow extends Applet { public void start() { setbackground(color.orange); } public void

import java.applet.applet; import java.awt.*; public class Grow extends Applet { public void start() { setbackground(color.orange); } public void 22.3 Animation Animation ist eine Bewegung vortäuschende Abfolge von Bildern(evt. mit Ton unterlegt:-) Für das menschliche Auge genügen 24 Bilder pro Sekunde. In der Zeit dazwischen legen wir das Applet

Mehr

Softwaretechnik 1 Übung 5

Softwaretechnik 1 Übung 5 Universität Karlsruhe (TH) Forschungsuniversität gegründet 1825 Softwaretechnik 1 Übung 5 2.7.29 Aufgabe 1a) Zeichnen Sie die komplette Vererbungshierarchie der Klasse BufferedOutputStream als UML- Klassendiagramm.

Mehr

Einführung in die Objektorientierte Programmierung Vorlesung 18: Lineare Datenstrukturen. Sebastian Küpper

Einführung in die Objektorientierte Programmierung Vorlesung 18: Lineare Datenstrukturen. Sebastian Küpper Einführung in die Objektorientierte Programmierung Vorlesung 18: Lineare Datenstrukturen Sebastian Küpper Unzulänglichkeit von Feldern Wenn ein Unternehmen alle Rechnungen eines Jahres verwalten möchte,

Mehr

Nebenläufige Programmierung in Java: Threads

Nebenläufige Programmierung in Java: Threads Nebenläufige Programmierung in Java: Threads Wahlpflicht: Fortgeschrittene Programmierung in Java Jan Henke HAW Hamburg 10. Juni 2011 J. Henke (HAW) Threads 10. Juni 2011 1 / 18 Gliederung 1 Grundlagen

Mehr

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor Albert-Ludwigs-Universität Freiburg Institut für Informatik Einführung in die Informatik Sommersemester 2013 PD Dr. Cyrill Stachniss Dr. Rainer Kümmerle Übungsblatt 13 Abgabe / Besprechung in Absprache

Mehr

System.out.println("TEXT");

System.out.println(TEXT); Inhaltsübersicht - Erstes Beispiel - Datentypen - Ausdrücke und Operatoren - Schleifen / Bedinungen - Struktogramme - Grundgerüst eines Programms in JAVA - Einlesen von Daten Erstes Beispiel public class

Mehr

Deadlocks Wait/Notify Reflections JavaBeans. Programmieren II. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester / 33

Deadlocks Wait/Notify Reflections JavaBeans. Programmieren II. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester / 33 Programmieren II Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2010 1 / 33 Deadlocks Wait/Notify Reflections JavaBeans 2 / 33 Verklemmungen Solange es nur einen Lock bzw. nur ein Objekt gibt, über

Mehr

9. Vorlesung Betriebssysteme

9. Vorlesung Betriebssysteme Dr. Christian Baun 9. Vorlesung Betriebssysteme Hochschule Mannheim WS1213 1/39 9. Vorlesung Betriebssysteme Dr. Christian Baun Hochschule Mannheim Fakultät für Informatik wolkenrechnen@gmail.com Dr. Christian

Mehr

Objektorientierung. Klassen und Objekte. Dr. Beatrice Amrhein

Objektorientierung. Klassen und Objekte. Dr. Beatrice Amrhein Objektorientierung Klassen und Objekte Dr. Beatrice Amrhein Überblick Konzepte der Objektorientierten Programmierung Klassen und Objekte o Implementierung von Klassen o Verwendung von Objekten 2 Konzepte

Mehr

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7.

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7. CoMa 04 Java II Paul Boeck Humboldt Universität zu Berlin Institut für Mathematik 7. Mai 2013 Paul Boeck CoMa 04 7. Mai 2013 1 / 13 Verzweigungen Wenn-Dann Beziehungen if (BEDINGUNG) { else if (BEDINGUNG2)

Mehr

Programmieren in Java -Eingangstest-

Programmieren in Java -Eingangstest- Programmieren in Java -Eingangstest- Nummer: 1. Studiengang: Informatik B.Sc. Informatik M.Sc. ESE B.Sc. ESE M.Sc. Sonstiges: Fachsemester: Bitte Fragen, die Sie nicht beantworten können unbedingt mit

Mehr

Einführung in die Informatik 1

Einführung in die Informatik 1 Einführung in die Informatik 1 Prof. Dr. Harald Räcke, R. Palenta, A. Reuss, S. Schulze Frielinghaus 21.02.2017 Klausur Vorname Nachname Matrikelnummer Unterschrift Füllen Sie die oben angegebenen Felder

Mehr

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor Albert-Ludwigs-Universität Freiburg Institut für Informatik Einführung in die Informatik Sommersemester 2018 Prof. Dr. Wolfram Burgard Andreas Kuhner Daniel Büscher Übungsblatt 13 Abgabe / Besprechung

Mehr

Programmieren II. Verklemmungen. Vorlesung 10. Handout S. 1. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester Deadlocks.

Programmieren II. Verklemmungen. Vorlesung 10. Handout S. 1. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester Deadlocks. Programmieren II Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2010 1 / 33 Deadlocks Wait/Notify Reflections JavaBeans 2 / 33 Verklemmungen Solange es nur einen Lock bzw. nur ein Objekt gibt, über

Mehr

Threading. Arthur Zaczek. Aug 2015

Threading. Arthur Zaczek. Aug 2015 Arthur Zaczek Aug 2015 1 Threading 1.1 Motivation Threading erlaubt die gleichzeitige Ausführung von mehreren Programmteilen. mehrere gleichzeitige Anfragen: Webserver, Datenbank (zu) lange laufende Berechnungen:

Mehr

Klausur Software-Entwicklung September 00

Klausur Software-Entwicklung September 00 Aufgabe 1: Wahrheitstafeln ausgeben (ca. 8 Punkte) Matrikelnr : Ergänzen Sie in folgendem Programm, eine rekursive Funktion, die eine Boole'sche Wahrheitstafel für N Variablen ausgibt. Die Zahl N soll

Mehr

Monitore. Klicken bearbeiten

Monitore. Klicken bearbeiten Sascha Kretzschmann Institut für Informatik Monitore Formatvorlage und deren Umsetzung des Untertitelmasters durch Klicken bearbeiten Inhalt 1. Monitore und Concurrent Pascal 1.1 Warum Monitore? 1.2 Monitordefinition

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Semestralklausur Einführung in die Programmierung Semestralklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList

Mehr

Einführung in die Informatik 1

Einführung in die Informatik 1 Einführung in die Informatik 1 Prof. Dr. Harald Räcke, R. Palenta, A. Reuss, S. Schulze Frielinghaus 18.04.2017 Wiederholungsklausur Vorname Nachname Matrikelnummer Unterschrift Füllen Sie die oben angegebenen

Mehr

Laborskript Verteilte Systeme

Laborskript Verteilte Systeme Laborskript Verteilte Systeme Nebenläufigkeit in Java Prof. Dr. Oliver Haase 1 Threads Java bietet zwei verschiedene Arten an, Threads zu erzeugen und zu starten: Entweder durch Erweitern der Klasse Thread,

Mehr

16. Dynamische Datenstrukturen

16. Dynamische Datenstrukturen Datenstrukturen 6. Dynamische Datenstrukturen Eine Datenstruktur organisiert Daten so in einem Computer, dass man sie effizient nutzen kann. Verkettete Listen, Abstrakte Datentypen Stapel, Warteschlange

Mehr

Nicht-blockierende Synchronisation für Echtzeitsysteme

Nicht-blockierende Synchronisation für Echtzeitsysteme Nicht-blockierende Synchronisation für Echtzeitsysteme Seminar Mobile Systeme Florian Schricker 15. März 2005 Seminarleiter: Prof. Dr. Dieter Zöbel 1 INHALTSVERZEICHNIS INHALTSVERZEICHNIS Inhaltsverzeichnis

Mehr

Interface. So werden Interfaces gemacht

Interface. So werden Interfaces gemacht Design Ein Interface (=Schnittstelle / Definition) beschreibt, welche Funktionalität eine Implementation nach Aussen anzubieten hat. Die dahinter liegende Algorithmik wird aber der Implementation überlassen.

Mehr

Programmieren 2 15 Abstrakte Datentypen

Programmieren 2 15 Abstrakte Datentypen Programmieren 2 15 Abstrakte Datentypen Bachelor Medieninformatik Sommersemester 2015 Dipl.-Inform. Ilse Schmiedecke schmiedecke@beuth-hochschule.de 1 Verallgemeinerte Datenbehälter Typ, der eine variable

Mehr

Vorlesung Informatik II

Vorlesung Informatik II Vorlesung Informatik II Universität Augsburg Wintersemester 2011/2012 Prof. Dr. Bernhard Bauer Folien von: Prof. Dr. Robert Lorenz Lehrprofessur für Informatik 16. Java: Threads für Animationen 1 Motivation

Mehr

Grundlagen in C# und.net

Grundlagen in C# und.net Grundlagen in C# und.net Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm Hochschule Harz FB Automatisierung und Informatik mwilhelm@hs-harz.de Raum 2.202 Tel. 03943 / 659 338 1 Inhalt TabbedPane (Register)

Mehr

Philosophen-Problem mit Threads 99

Philosophen-Problem mit Threads 99 Philosophen-Problem mit Threads 99 int main() { constexpr unsigned int PHILOSOPHERS = 5; std::thread philosopher[philosophers]; std::mutex fork[philosophers]; for (int i = 0; i < PHILOSOPHERS; ++i) { philosopher[i]

Mehr

Wegweiser. Das Erzeuger-/Verbraucher-Problem. Semaphore. Transaktionen. Botschaften

Wegweiser. Das Erzeuger-/Verbraucher-Problem. Semaphore. Transaktionen. Botschaften Wegweiser Das Erzeuger-/Verbraucher-Problem Semaphore Transaktionen Botschaften Betriebssysteme WS 2013, Threads 75 Beispiele Erzeuger-/Verbraucher-Probleme Betriebsmittelverwaltung Warten auf eine Eingabe

Mehr

Betriebssysteme 1. Einführung (2) Synchronisation: Probleme mit gleichzeitigem Zugriff auf Datenstrukturen Beispiel: Zwei Threads erhöhen einen Zähler

Betriebssysteme 1. Einführung (2) Synchronisation: Probleme mit gleichzeitigem Zugriff auf Datenstrukturen Beispiel: Zwei Threads erhöhen einen Zähler BS1-E Einführung (2) Betriebssysteme 1 SS 2018 Synchronisation: Probleme mit gleichzeitigem Zugriff auf Datenstrukturen Beispiel: Zwei Threads erhöhen einen Zähler Prof. Dr.-Ing. Hans-Georg Eßer Fachhochschule

Mehr

Schnittstellen, Stack und Queue

Schnittstellen, Stack und Queue Schnittstellen, Stack und Queue Schnittstelle Stack Realisierungen des Stacks Anwendungen von Stacks Schnittstelle Queue Realisierungen der Queue Anwendungen von Queues Hinweise zum Üben Anmerkung: In

Mehr