Hallo,
die Lösung zur folgenden Aufgabe ist vorhanden (siehe unten), aber ich habe leider dennoch einige Schwierigkeiten:
--
Betrachten Sie die folgende Klasse:
a. Welches Problem kann auftreten, wenn zwei oder mehr Threads sich zwei Instanzen dieser Klasse teilen?
b. Gehen Sie davon aus, dass zwei Threads T1 und T2 Zugriff auf zwei Instanzen a und b der Klasse Box besitzen. Geben Sie ein Beispiel für die Abfolge des Aufrufs der Methode
an, die das obige Problem provoziert.
Verwenden Sie dazu die folgende Notation:
c. Finden Sie eine Möglichkeit, das Auftreten dieses Problems auszuschließen! Geben Sie den entsprechenden modifizierten Quellcode dazu an.
Hinweis:
Sie müssen zur Lösung dieses Problems eine Ordnung auf den Instanzen der Klasse Box erzwingen.
--
--
Lösung:
a) Deadlock
b)
c)
--
Ich sehe hier leider nicht, wie eine Deadlock-Situation entstehen kann und deshalb ist mir die b) überhaupt nicht klar.
Der Code bei der c) scheint einige Leichtsinnsfehler zu beinhalten; davon mal abgesehen verstehe ich das Prinzip dahinter nicht ganz. Mit other==this wird überprüft, ob der übergebene Paramater auf das gleiche Objekt zeigt. Falls ja, wird nichts zurückgegeben. Warum eigentlich?
Hoffe Ihr seht hier mehr als ich und bedanke mich auf jeden Fall für Eure Hilfe
Gruß
Wang
die Lösung zur folgenden Aufgabe ist vorhanden (siehe unten), aber ich habe leider dennoch einige Schwierigkeiten:
--
Betrachten Sie die folgende Klasse:
Java:
public class Box
{
private int content;
synchronized int getContent()
{
return content;
}
synchronized void setContent(int v)
{
content = v;
}
synchronized void swapContent(Box other)
{
int c = getContent();
int o = other.getContent();
this.setContent(o);
other.setContent(c);
}
}
a. Welches Problem kann auftreten, wenn zwei oder mehr Threads sich zwei Instanzen dieser Klasse teilen?
b. Gehen Sie davon aus, dass zwei Threads T1 und T2 Zugriff auf zwei Instanzen a und b der Klasse Box besitzen. Geben Sie ein Beispiel für die Abfolge des Aufrufs der Methode
Code:
swapContent()
Verwenden Sie dazu die folgende Notation:
Code:
<Thread>: <Methodenaufruf>
c. Finden Sie eine Möglichkeit, das Auftreten dieses Problems auszuschließen! Geben Sie den entsprechenden modifizierten Quellcode dazu an.
Hinweis:
Sie müssen zur Lösung dieses Problems eine Ordnung auf den Instanzen der Klasse Box erzwingen.
--
--
Lösung:
a) Deadlock
b)
Code:
Thread1 Thread2
a.swapContent(b) b.swapContent(a)
a.getContent() b.getContent()
b.getContent() a.getContent()
c)
Java:
public void swapContent(Box other)
{
if(other==this) return;
else if (System.identifyHashCode(this) < System.identifyHash(other))
this.doSwapContent(other);
else
other.doSwapContent(this);
}
Ich sehe hier leider nicht, wie eine Deadlock-Situation entstehen kann und deshalb ist mir die b) überhaupt nicht klar.
Der Code bei der c) scheint einige Leichtsinnsfehler zu beinhalten; davon mal abgesehen verstehe ich das Prinzip dahinter nicht ganz. Mit other==this wird überprüft, ob der übergebene Paramater auf das gleiche Objekt zeigt. Falls ja, wird nichts zurückgegeben. Warum eigentlich?
Hoffe Ihr seht hier mehr als ich und bedanke mich auf jeden Fall für Eure Hilfe
Gruß
Wang
Zuletzt bearbeitet von einem Moderator: