![]() |
TThreadList und das Verhalten von Threads?
Hallo!
Wie verhalten sich die Threads, wenn die gerade versuchen auf eine gesperrte TThreadListe zuzugreifen? Kann es zu einem Problem werden, wenn der Thread, der die Liste gerade gesperrt hat, etwas länger braucht, z.B. wenn mehrere Tausend Einträge gelöscht werden müssen? Zitat aus der Embarcadero-Wiki: "Sie können in einem TThreadList-Objekt ohne explizites Sperren von mehreren Threads Listenelemente hinzufügen oder entfernen." Heißt dass, dass der Thread beim Versuch auf die gesperrte Liste weiterläuft oder wie ist es zu verstehen? |
AW: TThreadList und das Verhalten von Threads?
Zitat:
|
AW: TThreadList und das Verhalten von Threads?
Bei Einzeloperationen (Add, Delete usw.) ist dort die Sperre bereits eingebaut,
also Critical Section ala
Delphi-Quellcode:
Willst du mehrere Operationen machen, dann mußt/kannst/solltest du die Sperre der Liste verwenden, also vorallem bei Schleifen oder Prüfen-und-bei-Vorhandensein-zugreifen, da sich ja zwischendrin was an der Liste ändern könnte.
procedure TTThreadList.Add(Value: Typ);
begin Enter; try inherited Add(Value); finally Leave; end; end; |
AW: TThreadList und das Verhalten von Threads?
Zitat:
Delphi-Quellcode:
zur Verfügung gestellt.
LockList
|
AW: TThreadList und das Verhalten von Threads?
Hatte wohl mehr die Implementation der Queues/Stacks im Kopf.
Da sind die Push und Pop-Methoden direkt zugreifbar, also das Äquivalent für Append (Add) und Remove (Delete). [Edit] Nein, passt doch. ![]() ![]() Add geht immer und Remove sollte ohne Lock natürlich nur verwendet werden, wenn man der einzige Thread ist, der dieses Item besitzt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz