Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Altklausuren: Fehlersuche
Wir haben uns zusammen gesetzt um die Fehlersuche Aufgaben aus den Altklausuren zu machen, deshalb hier unsere Loesungsideen; Verbesserungen erwuenscht.
11-08-09; Aufgabe 3
Zeile 12
sychronized (Dinner.class) {
Zeile 97ff
synchronized (Dinner.class) {
leftFork.lock(); rightFork.lock();
System.out.println("Esse...");
rightFork.unlock(); leftFork.unlock();
}
Zeile 44/45
barrier.await();
Zeile 104/105
Dinner.barrier.await();
11-02-22; Aufgabe 6
Zeile 4, 30, 33
Mehere Threads greifen auf counter zu um es zu veraendern
Loesung: AtomicInt, ++ bzw -- mit Increment bzw DecrementAndGet ersetzen
Mehr haben wir nicht gefunden, help?
12-02-21; Aufgabe 4
Zeile 19
threads[i-1].exOut = exchangers[i-1];
Zeile 24
threads[i].start();
Zeile 42
barrier.await(); nach Zeile 58 schreiben
Zeile 59 - 60 erstetzen durch:
if (this.id == 1 || this.id ==2 || this.id == 3) stage();
barrier.await();
else end ();
workBarrier wird mit [m]length+1[/m] initialisiert, aber nur [m]length[/m] Threads greifen darauf zu.
Und folgendes Szenario:
Wir erzeugen [m]length[/m] Threads, die alle am [m]await[/m]-Aufruf in Zeile 27 hängen bleiben.
Der Mainthread erreicht Zeile 19, die Barrier kippt und der Mainthread wird sofort danach verdrängt.
Einer der Workerthreads erreicht Zeile 29, [m]glChanged[/m] ist nun [m]false[/m].
Der Mainthread wird wieder eingelagert, die Schleifenbedingung in Zeile 20 ist nun falsch und deshalb das Sortieren vorzeitig abgebrochen.
Und wenn ihr euch einigermaßen sicher seid, dass es richtig ist → ab ins Wiki damit! Auch einzelne gelöste Aufgabe helfen anderen sicherlich schon weiter (und motivieren zur Vervollständigung).
(Der Button zum Bearbeiten bzw. Erstellen einer neuen Seite versteckt sich ganz unten in der schwarzen Leiste).