Altklausuren: Fehlersuche

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! :slight_smile: 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).