Praktikum Thread-Synchronisation
Ziel
Sie können verschiedene Varianten der Vermeidung von Thread-Blockierungen praktisch anwenden.
Bedingungen für eine Verklemmung:
- Betriebsmittel nur unter gegenseitigem Ausschluss (exklusiv) nutzbar
- benutzte Betriebsmittel können dem Thread nicht entzogen werden
- Threads besitzen bereits Betriebsmittel und fordern weitere an
- Es gibt eine zyklische Kette von Threads, von denen jeder mindestens ein Betriebsmittel besitzt, das der nächste Thread in der Kette benötigt
Aufgabe
Lösen Sie das Philosophenproblem mittels der Synchronisationswerkzeuge der Sprache Java, siehe Vorlesungsfolien. Lösungsvarianten:
- Anforderung von BM auf einen Schlag
- Anforderung von BM nacheinander (Lösung wird ggf. blockieren)
- Anforderung von BM nacheinander mit Prüfung auf Entstehung einer Blockierung
- Anforderung von BM nacheinander mit Prüfung auf Entstehung einer Blockierung (mittels Semaphoren)
Programmaufbau
Nachfolgend ein Vorschlag für die Realisierung. Sie können natürlich auch eine andere Lösungsmöglichkeit suchen. Um Verklemmungen zu vermeiden, sollten alle benötigten Betriebsmittel auf einmal genommen werden. Nutzen Sie die Methoden (synchronized, wait(), notify() bzw. notifyAll() ).
Nutzen Sie folgende Klassen:
- Table
- Die Klasse Table beinhaltet die 5 Gabeln als zu verteilende Ressource (Betriebsmittelverwaltung). Folgende Methoden werden angeboten: takeFork(int number), putFork(int number). Es werden alle benötigten BM auf einen Schlag genommen/zurückgegeben. Als interne Struktur bietet sich an: boolean[] forkUsed
- Philosopher
- Threadklasse, folgende Methoden werden in einer Schleife aufgerufen (think, takeFork, eat, putFork)
Die 5 Philosophen sollen Namen bekommen und eine Zustandsänderung soll auf der Konsole angezeigt werden. Denken und Essen sei eine Zufallswartezeit im Bereich 0-20s.
Fakultativ
- Versuchen Sie eine Verklemmung/Blockade der Philosophen zu erreichen, indem Sie die Gabeln nacheinander aufnehmen.
- Versuchen Sie andere Lösungen zur Vermeidung der Verklemmung zu finden und diese zu implementieren.
Semaphore:
Letzte Änderung: 09. April 2024 22:16