Zitat von
tobias_sdr:
Ich habe aber nur lesenden Zugriff in den Berechnungsthreads. Mein Hauptthread vergrößert die Dyn-Array nach jeden Berechnungsdurchlauf um das Ergebnis.
Ich denke, da sitzt das Problem! DynArrays sind ja eigentlich nichts anderes als Pointer auf ein Array bestimmter Größe. Beim Vergrößern des DynArrays wird bei Bedarf neuer Speicherplatz an ganz anderer Stelle zugewiesen, das Array dorthin kopiert und der Pointer angepasst. Der alte Speicherplatz wird freigegeben und kann für andere Sachen verwendet werden. Wenn nun während einer Berechnung im Neben-Thread der Haupt-Thread das DynArray verschiebt, arbeitet der Neben-Thread auf dem falschen Speicherbereich.
Um es mal so auszudrücken: "Nur-Lesen" bei mehreren Threads gilt immer auch für den Haupt-Thread. Sobald einer schreibt sollte man synchronisieren. Es mag zwar Fälle geben, wo das unnötig ist, aber wer garantiert denn, daß das bei der nächsten Programmänderung bzw. beim nächsten Delphi- oder Windows-Update so bleibt?