Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
39.129 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Thread sichere Datenabfrage

  Alt 29. Okt 2020, 11:19
Überall muß um alles, was auf diese Variablen zugreift, die selbe CriticalSection (oder Ähnliches, z.B. siehe Delphi-Referenz durchsuchenSyncObjs).


Nur Lesend, wenn währenddessen nirgendwo Schreibend zugegriffen werden kann, da kann man es auch ohne Synchronisation machen, aber nur wenn beim Lesezugriff nichts geschrieben wird.
z.B. Stream.Read ist ein schreibender Zugriff, da dort der Posiotionszeiger verändert wird.

Auch Lesend auf eine String-Variable oder Interface-Zeiger zugreifen ist ein schreibender Zugriff,
aber die Referenzzählung ist mit den nachfolgend erwähnten atomaren Operationen gelöst.



Zuweisen/Ändern von Integern/Pointer, da gibt es auch die Möglichkeit von "atomaren" Zugriffen durch die CPU,
siehe MSDN-Library durchsuchenInterlockedAdd und Auslesen geht ohne Extrafunktion (siehe "nur Lesend", da die CPU während des Schreibens alles blockt).

Mehrfach auf den "selben" Wert zugreifen, dann vorher in eine lokale Variable kopieren.
z.B. if myvar > 0 then MachwasMit(myvar);

nur Windows: Bei Google suchenInterlockedIncrement
ansonsten siehe Delphi-Referenz durchsuchenTInterlocked.Increment bzw. die neuen platformübergreifenden Delphi-Referenz durchsuchenAtomicIncrement
oder LOCK im Assembler. https://www.felixcloutier.com/x86/xadd https://stackoverflow.com/questions/...n-x86-assembly
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (29. Okt 2020 um 11:25 Uhr)
  Mit Zitat antworten Zitat