Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#4

Re: Berechnungs-Threads die lesend auf Dynamische Arrays zug

  Alt 14. Mai 2009, 10:49
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?
Uwe Raabe
  Mit Zitat antworten Zitat