Uebungsblatt03Nebenl.. - Webauftritt von Karlheinz Hug

Werbung
Hochschule Reutlingen - Reutlingen University
Fakultät Informatik
Studiengang Medien- und Kommunikationsinformatik
akkreditiert von der ASIIN
Prof. Dr. Karlheinz Hug
Informatik 3
Ü3
Übungsblatt: Nebenläufigkeit
Aufgabe 3
Ü3.1
Synchronisationskonzepte
Aufgabe Ü3.1
Java:
Ausnahmebehandlung
bei Synchronisation
In Java können Threads in der Synchronisationsmethode wait auf ein notify eines
anderen Threads warten. Ein Thread kann einen wartenden Thread unterbrechen (z.B.
wenn ein Benutzer interaktiv den Abbruch eines Threads verlangt), wodurch im wartenden Thread eine InterruptedException ausgelöst wird, die dieser entweder an die
aufrufende Methode weiterreicht oder beim wait-Aufruf behandelt. wait-Aufrufe können daher in einer try-catch-Struktur stehen und gehören, da die Wartebedingung
nach dem Warten meist nicht sicher falsch ist, meist in eine Schleife.
Programm Ü3.1
Java: Idiom zum
Warten in
synchronisierter
Methode
while (needToWait) {
try {
wait();
} catch(InterruptedException e) {
// what to do here?
}
}
Doug Lea schlägt in seinem Buch Concurrent Programming in Java (1997) als Optionen für die Ausnahmebehandlung vor:
(1)
(2)
(3)
(4)
(5)
(6)
Ignorieren, also nichts tun. (Bloch empfiehlt in Effective Java Programming
Language Guide (2001), Ausnahmen nie zu ignorieren.)
Aktuellen Thread terminieren durch einen stop-Aufruf (der seit JDK 1.2 (1999)
als unsicher verworfen (deprecated) ist und nicht mehr verwendet werden soll).
Die Methode sofort mit return verlassen.
Eine neue Ausnahme werfen (throw new InterruptedException).
Aufräumen und das Hauptprogramm neu starten.
Den Benutzer interaktiv fragen, was zu tun sei.
Diskutieren Sie Konsequenzen, Stärken und Schwächen dieser Vorschläge und geben
Sie eine Programmierempfehlung!
Aufgabe Ü3.2
Semaphorimplementationen
Aus der Vorlesung kennen Sie eine Semaphorimplementation in Java; Programm Ü3.2
zeigt eine andere.
(1)
(2)
(3)
(4)
(5)
Worin unterscheiden sich die beiden Semaphorimplementationen?
Warum sind beide Implementationen äquivalent?
Geben Sie eine Invariante für count in Programm Ü3.2 an!
Welche Information geht in Programm Ü3.2 gegenüber der anderen Implementation verloren?
Warum ist Programm Ü3.2 weniger effizient als die andere Implementation?
© Karlheinz Hug, Hochschule Reutlingen, 28. November 2008
I3 - Ü3 - Seite 1 von 2
Informatik 3 - Ü3 - 2
Programm Ü3.2
Java: Semaphor
Ü3 Übungsblatt: Nebenläufigkeit
public class Semaphore {
private int count;
public Semaphore (int initCount) {
assert initCount >= 0 :
"Precondition: Initial value nonnegative";
count = initCount;
}
public synchronized void await () {
while (count == 0) {
try {
wait();
} catch (InterruptedException e) {
...
}
}
count--;
}
public synchronized void signalize () {
count++;
notify();
}
}
© Karlheinz Hug, Hochschule Reutlingen, Fak. Informatik, mki-B
28.11.08
Herunterladen