Verteilte Systeme — ¨ Ubungsblatt 4
Prof. Dr. Oliver Haase
In dieser Aufgabe geht es darum, den verteilten Algorithmus von Ricart und Agrawala zum gegenseitigen Ausschluss zu programmieren.
Die abstrakten Klassen DistributedSystem, Process und Message zur Simulation eines verteilten Systems, in der die ’Prozesse’ als nebenl¨aufige Threads in derselben virtuel- len Maschine ablaufen und nachrichtenbasiert miteinander kommunizieren, sind bereits vorgegeben.
Außerdem gegeben sind die KlassenRADistributedSystem,RATrigger,RARequest und RAResponse.
Zur Vervollst¨andigung der L¨osung m¨ussen Sie lediglich die fehlende Klasse RAProcess als Subklasse der vorgegebenen Klasse Prozess implementieren, was konkret bedeutet, dass Sie Methoden zum korrekten Bearbeiten von Nachrichten der Typen RATrigger, RARequest und RAResponse programmieren m¨ussen. Beachten Sie dazu folgende Hin- weise:
• Zum Abwarten der ben¨otigten (n -1)RAResponse-Nachrichten bietet sich die Klasse CountDownLatch an.
• Wenn ein Prozess den Lock erh¨alt, dann soll er ihn f¨ur 3 Sekunden halten und danach wieder freigeben.
• Nach dem Ricart-Agrawala-Algorithmus verz¨ogert ein Prozess das Aussenden einer RAResponse-Nachricht unter Umst¨anden. F¨ur das Abwarten der entsprechenden Bedingung k¨onnen Sie das Methoden-Paarwait()undnotify()bzw.notifyAll() verwenden.
Wenn Sie das vollst¨andige Programm laufen lassen, dann sollten Sie in etwa folgende Ausgabe erhalten:
1
Viel Spass & gutes Gelingen!
2