Übungsblatt 5

Ausgabe: 27.05.2008
Abgabe: 04.06.2008, 16:00 Uhr

Aufgabe 1 (8 P)

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:

  1. mit Warteanweisungen (AWAIT),
  2. mit Wachen (WHEN).

Dabei soll angestrebt werden, dass die neuen Versionen dem Verhalten des Originals möglichst nahekommen.

Aufgabe 2 (6 P)

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!

Aufgabe 3 (6 P)

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.

  1. (4 P.) Zeigen Sie mit einem Beispiel, dass diese Hoffnung trügt!
  2. (4 P.) Erläutern Sie, woran das liegt, und leiten Sie daraus eine allgemeine Empfehlung für den Entwurf von Monitoren ab!

Hinweise zur Abgabe:

Die Abgabe der Lösungen erfolgt auf zwei Wegen:

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 .

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.