[gelöst] [C#] Übernatürliche Erscheinungen durch Threading
Verfasst: 16.02.2017, 19:03
Hallo Leute,
ich versuche gerade erfolglos, Teile meines Programms zu parallelisieren. Dabei sollen die einzelnen Threads jeweils ein eigenes HashSet von strings generieren, die dann am Ende nur noch in ein gemeinsames HashSet geworfen werden (innerhalb eines kritischen Abschnitts, da sollte nix schiefgehen). Ich kriege jetzt bei jedem Programmaufruf immer ein anderes Ergebnis, und zwar anscheinend immer nur Teilergebnisse einzelner Threads. Bei der Fehlersuche habe ich festgestellt, dass anscheinend die Parameter überhaupt nicht (mehr) stimmen, mit denen Threads arbeiten. Habt ihr sowas hier schonmal gesehen?
...sprich, beide Indizes (iRow und iCol) auf 3, obwohl ich ausdrücklich jeweils nur bis 2 zählen will..? Was läuft hier falsch, ich hab keine Ahnung. Der Debugger?
Das Thread.Sleep() am Ende soll sicherstellen, dass alle Threads genug Zeit zum Beenden haben, falls das join() am Ende aus irgendeinem Grund ignoriert werden sollte. Aber das ändert auch nichts an den falschen Ergebnissen.
Ohne das Threading hatte alles schön geklappt, also an der eigentlichen Logik liegt es nicht. (da wurde auch nicht bis 3 gezählt)
Vielleicht habt ihr eine Anregung? Bin ratlos! :/
EDIT: Klappt alles bestens jetzt, yeah!!!
ich versuche gerade erfolglos, Teile meines Programms zu parallelisieren. Dabei sollen die einzelnen Threads jeweils ein eigenes HashSet von strings generieren, die dann am Ende nur noch in ein gemeinsames HashSet geworfen werden (innerhalb eines kritischen Abschnitts, da sollte nix schiefgehen). Ich kriege jetzt bei jedem Programmaufruf immer ein anderes Ergebnis, und zwar anscheinend immer nur Teilergebnisse einzelner Threads. Bei der Fehlersuche habe ich festgestellt, dass anscheinend die Parameter überhaupt nicht (mehr) stimmen, mit denen Threads arbeiten. Habt ihr sowas hier schonmal gesehen?
...sprich, beide Indizes (iRow und iCol) auf 3, obwohl ich ausdrücklich jeweils nur bis 2 zählen will..? Was läuft hier falsch, ich hab keine Ahnung. Der Debugger?
Das Thread.Sleep() am Ende soll sicherstellen, dass alle Threads genug Zeit zum Beenden haben, falls das join() am Ende aus irgendeinem Grund ignoriert werden sollte. Aber das ändert auch nichts an den falschen Ergebnissen.
Ohne das Threading hatte alles schön geklappt, also an der eigentlichen Logik liegt es nicht. (da wurde auch nicht bis 3 gezählt)
Vielleicht habt ihr eine Anregung? Bin ratlos! :/
EDIT: Klappt alles bestens jetzt, yeah!!!