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.
4.6 GoldenSearch
Hallo,
ich hatte heute meine Tafeluebung und habe noch eine Frage zu 4.6 b), also zu ThreadedGoldenSearch. Die Methode findMinimum(…) soll ja ein Double[] zurueckgeben.
Ich habe in der Klasse ThreadedGoldenSearch eine Innere Klasse erstellt, in der mein Double[] res befuellt wird. Meine Frage lautet nun, wie ich in findMinimum(…) vor dem [m]return res;[/m] darauf warten kann, dass alle Threads ihre Ergebnisse in Double gespeichert haben?
Wenn ich dieses CyclicBarrier ausprobiere und ans Ende der run() Methode von der inneren Klasse[m] barrier.await();[/m] schreibe, dann wird in findMinimum() ein nicht vollstaendiges Array zurueckgegeben. Wenn ich vor dem return in findMinimum() ein join() fuer den zuletzt gestarteten Thread schreibe zusaetzlich zu den barrier.await() Aufrufen, dann sollten doch alle Threads duch das await() aufeinander warten und durch das eine join() sollten dann alle Threads ihre Ergebnisse in das Array geschrieben haben, bevor findMinimum(…) das double Array returnt. Leider terminiert dann das Programm nicht mehr?
Warum nur für den zuletzt gestarteten Thread? Nur weil er zuletzt gestartet wird, heißt das nicht, dass er auch als letztes fertig wird. Und CyclicBarrier muss man hier nicht unbedingt verwenden.
Jetzt habe ich die b) so geloest, dass ich vor dem return in der findMinimum() Methode alle gestarteten Threads joine, aber war das wirklich so gedacht? Denn benoetigten Stoff dafuer haetten wir ja schon vor 2 Wochen gehabt…
Ja, das war wirklich so gedacht, und das steht auch mehr oder weniger auf der ersten Folie der aktuellen Übung. Die CyclicBarrier wurde nur für den Schreibtischlauf eingeführt, sie kommt später nochmals gesondert in einer Übung dran (weil sie eigentlich erst in der achten Vorlesung eingeführt wird).