Forum: Sonstige Fragen zu Delphi
Delphi
by himitsu,
25. Okt 2009
Compare-and-Swap/InterlockedExchange zähle ich mit zum Absichern.
drum hab ich auch nicht looken/sperren sondern "absichern" gesagt :zwinker:
Forum: Sonstige Fragen zu Delphi
Delphi
by himitsu,
25. Okt 2009
Auch verkettete Listen müssen abgesichert werden!
Aber dort kann man es so einrichten, daß man jedes Element einzeln absichert und nicht die ganze Liste auf einmal ... so lassen sich viele Zugriffe an verschiedenen Stellen womöglich besser optimieren, da sie sich so nicht gegenseitig stören.
Forum: Sonstige Fragen zu Delphi
Delphi
by himitsu,
25. Okt 2009
genau sowas verhindern dieses TMultiSync-Dinger
sie erlauben gleichzeitige Lesezugriffe, aber nur wenn in diesem Moment nicht schreibend zugegriffen wird
oder sie erlauben nur einen Schreibzugriff und sonst nix.
somit ist sichergestellt, daß immer nur einer ändert
und man nicht lesen kann, wärend geändert wird.
Forum: Sonstige Fragen zu Delphi
Delphi
by himitsu,
25. Okt 2009
am Besten wäre es, wenn du das Array in einer Klasse verwaltest und Zugriffe immer nur über Funktionen/Properties dieser Klasse (das kann auch der Hauptthread, bzw. das Formular sein) wird auf die Daten des Arrays zugegriffen.
Dann hast du auch die Synchronisierung (CriticalSection) zentral an einer Stelle.
Ansonsten mußt du ja die CriticalSection und einen Zeiger auf die Array-Variable...
Forum: Sonstige Fragen zu Delphi
Delphi
by himitsu,
24. Okt 2009
Also ganz einfach alle Zugriffe auf dieses Array über eine CriticalSection oder Ähnliches absichern.
Ganz Einfach, alles, was mit Pointer arbeitet und sich nicht als threadvar deklarieren läßt, das mußt du absichern.
Von Natur aus sind erstmal nur die Referenzzählungen von Strings (AnsiString/UnicodeString) und Interfaces ThreadSave, weil Delphi dort selber schon threadsichere Zugriffe...