Einzelnen Beitrag anzeigen

Rollo62

Registriert seit: 15. Mär 2007
3.916 Beiträge
 
Delphi 12 Athens
 
#1

BestPractices: Nutzung der AtomicIncrement/Decrement als threadsafe Getter / Resetter

  Alt 28. Feb 2019, 10:05
Hallo zusammen,

ich benutze die Atomic.... Threadsafe Funktionen seit geraumer Zeit, und bin damit hochzufrieden.

Allerdings benutze ich diese, mangels entsprechender Funktionen, teilweise etwas "abgewandelt".
Ich würde gerne mal eure Meinungen dazu hören, ob es damit evtl. irgendwelche Seiteneffekte, oder Probleme geben könnte.


AtomicIncrement() als Getter
Delphi-Quellcode:
    LTempCopy := AtomicIncrement( FVariable, 0); // "DONT Inc" and Get threadSafe
    if LTempCopy = xyz then
       ...
Das Konstrukt scheint gut zu funktionieren, es holte den aktuellen Wert von FVariable threadsafe, und legt eine temporäre Kopie davon 1:1 an,
mit der ich dann normal weiterarbeiten kann.


AtomicIncrement() als Resetter
Delphi-Quellcode:
    LTempCopy := AtomicIncrement( FVariable, 0); // "DONT Inc" and Get threadSafe

    AtomicDecrement( FVariable, -LTempCopy ); // Set Zero threadSafe
Auch dieses Konstrukt scheint problemlos zu Laufen, und ich habe bisher keine Probleme damit.

Könnten diese beiden Konstrukte oben an irgendeiner Stelle Probleme machen,
z.B. Überläufe von Variablen, irgendwelche Seiteneffekte, o.ä
oder kann ich denen weiterhin blind vertrauen ?

Ich wäre erfreut eure Meinungen und Erfahrungen dazu zu lesen.

Rollo

Geändert von Rollo62 (28. Feb 2019 um 10:07 Uhr)
  Mit Zitat antworten Zitat