Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TList<T>, TQueue<T>, TDictionary<T> Threadsafe? (https://www.delphipraxis.net/146468-tlist-t-tqueue-t-tdictionary-t-threadsafe.html)

Win32.API 20. Jan 2010 14:52


TList<T>, TQueue<T>, TDictionary<T> Thread
 
Hallo,

sind die oben genannten Typen threadsafe, wenn man nur lesen drauf zugreift?

Z.b. mit einer Schleife alle Eintraege durchlaufen.

Grueße,
Win32.API

igel457 20. Jan 2010 15:44

Re: TList<T>, TQueue<T>, TDictionary<T> Th
 
So lange du nur lesend Zugriff auf eine Datenstruktur hast ist diese - außer die Implementierung ist nicht gut und schreibt z.B. in Variablen der Klasse/Unit und nicht in lokale Variablen auf dem Stack - immer Threadsicher.

Win32.API 20. Jan 2010 16:03

Re: TList<T>, TQueue<T>, TDictionary<T> Th
 
Genau, da ich aber den Source fuer die Generics nicht besitze wuerde ich es gerne von jemandem bestaetigt haben, der sich damit schon mal auseinander gesetzt hat.

Grueße,
Win32.API

jbg 20. Jan 2010 17:34

Re: TList<T>, TQueue<T>, TDictionary<T> Th
 
Zitat:

Zitat von Win32.API
Genau, da ich aber den Source fuer die Generics nicht besitze

Wie denn das? Alle Editionen kommen mit dem Quellcode der RTL und VCL.

igel457 20. Jan 2010 18:40

Re: TList<T>, TQueue<T>, TDictionary<T> Th
 
TList etc. verwalten intern ein Array. Beim (lesenden) Zugriff auf "Items" wird nur der Inhalt des Arrays zurückgegeben, sonst wird nichts gemacht. Lesender Zugriff auf TList und Verwandte davon ist Threadsicher.

Win32.API 20. Jan 2010 19:18

Re: TList<T>, TQueue<T>, TDictionary<T> Th
 
Zitat:

Zitat von jbg
Zitat:

Zitat von Win32.API
Genau, da ich aber den Source fuer die Generics nicht besitze

Wie denn das? Alle Editionen kommen mit dem Quellcode der RTL und VCL.

Echt, seit wann denn das? Werde es mir anschauen, sobald ich wieder auf der Arbeit bin.

Zitat:

Zitat von igel457
TList etc. verwalten intern ein Array. Beim (lesenden) Zugriff auf "Items" wird nur der Inhalt des Arrays zurückgegeben, sonst wird nichts gemacht. Lesender Zugriff auf TList und Verwandte davon ist Threadsicher.

Danke, da ich den Source warscheinlich doch habe, werde ich es mir zur Sicherheit nochmal anschauen.

Grueße,
Win32.API

jbg 20. Jan 2010 21:20

Re: TList<T>, TQueue<T>, TDictionary<T> Th
 
Zitat:

Zitat von Win32.API
Echt, seit wann denn das?

Seit es keine Standard bzw. Personal Edition mehr gibt. Also Seit Delphi 2006 (Auch die TurboDelphi Variante hatte den Quellcode, nur eben keinen Kommandozeilen Compiler)

mindtrap 20. Jan 2010 21:21

Re: TList<T>, TQueue<T>, TDictionary<T> Th
 
Zitat:

Zitat von igel457
TList etc. verwalten intern ein Array. Beim (lesenden) Zugriff auf "Items" wird nur der Inhalt des Arrays zurückgegeben, sonst wird nichts gemacht. Lesender Zugriff auf TList und Verwandte davon ist Threadsicher.

Das ist eine gefährliche Aussage.
Wenn dein Thread die TList exklusiv verwendet ist das kein Problem.
Wird die TList allerdings von zwei Threads verwendet...
Ich habe die Implementierung momentan nicht vor mir liegen, aber TList wird nicht beim
Zugriff gesperrt.
Da die Liste vermutlich auch mit Elementen gefüllt wird (sonst ist sie sinnlos), muss also irgendetwas auch
schreibenden Zugriff haben. Und wenn dieses Etwas zufällig ein Element entfernt, während der Thread
liest, dann heißt es Daumen drücken.
Dafür gibt es extra eine Implementierung von TThreadList, welche intern eine TList verwendet und bei Zugriffen
sperrt.


Zitat:

Zitat von jbg
Zitat:

Zitat von Win32.API
Genau, da ich aber den Source fuer die Generics nicht besitze

Wie denn das? Alle Editionen kommen mit dem Quellcode der RTL und VCL.

Ich glaube die Personal Editions lieferten den Code nicht mit.
Aber das wird Win32.API sicherlich nicht in der Arbeit verwenden. :}

Daniel 20. Jan 2010 21:29

Re: TList<T>, TQueue<T>, TDictionary<T> Th
 
Zitat:

Zitat von mindtrap
Ich glaube die Personal Editions lieferten den Code nicht mit.

Die Kombination "Delphi" + "Generics" + "Personal Edition" hat es bis heute offiziell nicht gegeben. ;-)

mindtrap 20. Jan 2010 21:31

Re: TList<T>, TQueue<T>, TDictionary<T> Th
 
Stimmt, allerdings war ich auch in Gedanken nur bei dem Wort Code und nicht Generic. :shock:

Dann bin ich mir garnicht sicher, ob das auf meine Aussage bzgl. TList zutrifft. Hier geht es ja um Generic. :mrgreen: :wall:
Ich muss mal mein Delphi wieder aktualisieren, bei D2005 gibt's keine Generics.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:58 Uhr.
Seite 1 von 2  1 2      

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