Ich habe ein TArray<TIrgendeinRecord>. TIrgendeinRecord kann grundsätzlich alle möglichen Simple Datentypen beinhalten.
Dieses Array wird einmalig mit Daten gefüllt. Um die Hunderttausend Einträge. Danach werden mit diesen Daten nur noch Auswertungen durchgeführt. Also nur lesend.
Ich würde nun gerne mit mehrere Threads die Auswertungen parallel durchführen. Da sichergestellt ist, dass die Daten nicht geändert werden, sollte es doch möglich sein, auf die Daten ohne TThread.Synchronize zuzugreifen. Oder?
Ich habe natürlich schon vorher mal gegoogelt. Aber da teilen sich die Meinungen sehr. Außerdem sind viele Infos sehr alt und vielleicht gibt es ja in neuen Delphi-Versionen neue Techniken, die ich einfach übersehen habe.
Es müsste gehen. Aber du kannest es auch mit einem Syncobjs.TMREW absichern (Multiple Read , Single Write).
Das beste ist immer wenn die Daten in den Thread übergibts und dann im Hauptthread keine Referenz mehr auf diese daten verweist. Dann kannst du sicher sein, dass die daten nicht aus dem Huaptthread zugegriffen werden. Bei Abschluss des Threads kann der thread ja auch eine Referenz auf die Daten wiedergeben...dann braucht es kein zugriffsmanagement über CS oder MREW.
Bei mehreren Threads müste es möglich sein Referenzen zu übergeben die nur bestimmte Teile der Daten sehen können bzw. das sicherste sind halt immer kopien aber das ist ja mit etwas overhead verbunden...