Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   TDictionary beim lesen thread-safe? (https://www.delphipraxis.net/189452-tdictionary-beim-lesen-thread-safe.html)

AndyDF 14. Jun 2016 09:45

Delphi-Version: 10 Seattle

TDictionary beim lesen thread-safe?
 
Hallo,

mir ist klar, dass ein TDictionary beim Schreiben nicht thread-safe ist.

Die Frage ist aber, kann ich von verschiedenen Threads lesend auf ein TDictionary zugreifen?

Also mit den Methoden:
- TryGetValue
- ContainsKey
- ...

Ich habe das Gefühl, dass genau das bei mir manchmal zum Problem führt.

Inhalt des Dictionaries sind nur Integer, String und TGUID (dies evtl. noch kombiniert in einem Record). Also keine Objekte die verändert werden könnten.

Viele Grüße,
Andreas

Der schöne Günther 14. Jun 2016 09:53

AW: TDictionary beim lesen thread-safe?
 
Ohne etwas genaues zu wissen, ich wüsste nicht weshalb das ein Problem sein sollte. Solange es auch wirklich "read only" ist.

Kannst du Beispiel-Code geben der irgendwie unerwartetes Verhalten zeigt?

AndyDF 14. Jun 2016 10:19

AW: TDictionary beim lesen thread-safe?
 
Das hätte ich auch angenommen. Das reines "read-only" funktionieren sollte.

Leider kann ich keinen Code liefern, der auf meinen Fehler deuten kann. Da doch einiges an der Stelle abläuft und ich auch nicht sicher bin, ob es überhaupt damit zusammen hängt.
Deshalb wollte ich dies erst mal grundsätzlich abklären, ob ein read-only zugriff problemlos möglich sein sollte.

stahli 14. Jun 2016 11:37

AW: TDictionary beim lesen thread-safe?
 
Sofern das Dictionary z.B. einen privaten Positionszeiger o.ä. für die Suche verwendet könnte es natürlich schon Probleme geben.
Da heißt: Du greifst zwar nur lesend zu, aber intern wird dabei auf den gleichen Speicherplatz mehrfach geschrieben.

Bleibt also wohl nur, genauer in der Hilfe oder im Quelltext nachzusehen (kann ich gerade nicht tun).

taveuni 15. Jun 2016 15:38

AW: TDictionary beim lesen thread-safe?
 
Was für einen Fehler hast Du denn? Sichere doch den Zugriff mit einer CriticalSection ab.

Mavarik 15. Jun 2016 15:44

AW: TDictionary beim lesen thread-safe?
 
Zitat:

Zitat von taveuni (Beitrag 1340247)
Was für einen Fehler hast Du denn? Sichere doch den Zugriff mit einer CriticalSection ab.

TMonitor

taveuni 15. Jun 2016 16:15

AW: TDictionary beim lesen thread-safe?
 
Zitat:

Zitat von Mavarik (Beitrag 1340248)

TMonitor

Nein Danke.

https://www.delphitools.info/2013/06...iticalsection/

Aber klar - ist vermutlich Glaubenssache (siehe meine Signatur) und sowieso OT.

Edit: Wenn schon TFixedCriticalSection


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:37 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