In der Vorlesung wurde Ihnen das Beispiel eines Zwei-Drucker-Systems vorgestellt, welches Ereignisobjekte für die Synchronisation einsetzt. Implementieren Sie nun den Monitor TwoPrinters
mit zwei anderen Versionen für die Bedingungssynchronisation:
AWAIT
), WHEN
). Dabei soll angestrebt werden, dass die neuen Versionen dem Verhalten des Originals möglichst nahekommen.
Entwickeln Sie eine Klasse ReentrantLock
mit Methoden lock, unlock, die sich wie die gleichnamigen Methoden der gleichnamigen Java-Bibliotheksklasse verhalten. Benutzen Sie dabei die Warteanweisung AWAIT, programmieren Sie aber ansonsten in korrektem Java!
Die folgenden Code-Fragmente sind vorgegeben:
class Complex { //complex numbers
float re, im;
public Complex(float re, float im){
this.re = re;
this.im = im;
}
}
class X {
private String text;
private Complex co;
public X(String s, Complex c) {
text=s;
co=c;
}
synchronized void update(String s, float re, float im) {
if(s!=null) text = s;
co.re = re;
co.im = im;
}
synchronized String get() {
return text+" "+co.re+" "+co.im;
}
}
class Test {
public static void main(String[] args){
String text = "one complex number";
Complex com = new Complex(0f,1f);
X one = new X(text,com);
X two = new X(text,com);
...
}
}
Wir nehmen an, dass nach der Initialisierung in Test mehrere Fäden aktiv werden, die teils auf one und teils auf two operieren. Da es sich beim X um einen Monitor handelt, sollten keine unerwünschten Effekte auftreten.
Hinweise zur Abgabe:
Die Abgabe der Lösungen erfolgt auf zwei Wegen:
Abgabe auf Papier:
Bitte schreiben Sie zur jeder Aufgabe eine Dokumentation, in der Sie anhand von *relevanten* Codefragmenten Ihre Implementierung erläutern. Die Codefragmente sollten möglichst kurz gehalten werden und nur der Orientierung für den Leser dienen; entscheidend sind Ihre Erläuterungen, was diese Fragmente machen und wieso Sie sich für diese Art der Implementierung entschieden haben. Die Dokumentation ist bis Mittwoch 16:00 Uhr in den Tutorenfächern abzugeben .
Abgabe per E-Mail:
Schicken Sie ein ZIP-Archiv an Ihren Tutor, welches den vollständigen Quellcode sowie ausführbare JAR-Dateien für die jeweiligen Aufgabenteile enthält. Der Betreff der E-Mail sollte wie folgt aussehen: "[ALP4] Blatt X - Namen Y".
Zum Bestehen des Übungsblattes müssen 50% der Punkte erreicht werden.