AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein BestPractices: Nutzung der AtomicIncrement/Decrement als threadsafe Getter / Resetter
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Rollo62 · begonnen am 28. Feb 2019 · letzter Beitrag vom 28. Feb 2019
Antwort Antwort
Rollo62

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

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

  Alt 28. Feb 2019, 11: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 11:07 Uhr)
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#2

AW: BestPractices: Nutzung der AtomicIncrement/Decrement als threadsafe Getter / Rese

  Alt 28. Feb 2019, 12:10
Die Getter sind meistens völlig problemlos, und du kannst quasi alles machen, ohne dass du Probleme bekommst. (Ja es gibt Ausnahmen ...)

Beim Schreiben kommt die Wahrheit ans Licht:
Code:
FVariable := 10;

Thread A: LTempCopy := AtomicIncrement( FVariable, 0); // 10
Thread B: LTempCopy := AtomicIncrement( FVariable, 0); // 10

Thread A: AtomicDecrement( FVariable, -LTempCopy ); // 0
Thread B: AtomicDecrement( FVariable, -LTempCopy ); // -10
Wohl doch nicht so ...

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

Registriert seit: 15. Mär 2007
4.093 Beiträge
 
Delphi 12 Athens
 
#3

AW: BestPractices: Nutzung der AtomicIncrement/Decrement als threadsafe Getter / Rese

  Alt 28. Feb 2019, 20:34
Ich nutze das bei mir nicht in extremen Multithread Situationen, deshalb ist mir
Noch nichts Negatives aufgefallen.
Mir fehlen aber die entsprechenden threadsicheren Schreibfunktionen.

Man könnte auch AtomicExchange nehmen, aber das kommt doch am Ende aufs gleiche raus.
Oder etwa nicht ?
Ok, Exchange kann die Variable setzen ohne das sich die interne Variable weiterbewegt..

Wie kommt man zum Lesen und Screiben einfacher Variablen um ein Lock.Enter/Leave herum ?
Das sollte mit Atomic Funktionen doch ideal und elegant möglich sein.

Gibt es nicht noch ein paar Tricks die damit möglich sind ?

Geändert von Rollo62 (28. Feb 2019 um 20:40 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz