AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) TThreadList und das Verhalten von Threads?
Thema durchsuchen
Ansicht
Themen-Optionen

TThreadList und das Verhalten von Threads?

Ein Thema von uups · begonnen am 3. Feb 2017 · letzter Beitrag vom 4. Feb 2017
Antwort Antwort
uups

Registriert seit: 23. Aug 2004
68 Beiträge
 
#1

TThreadList und das Verhalten von Threads?

  Alt 3. Feb 2017, 19:03
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?
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.623 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: TThreadList und das Verhalten von Threads?

  Alt 3. Feb 2017, 21:09
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?
Nein, der Thread wird geblockt, wenn er nicht zugreifen kann.
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: TThreadList und das Verhalten von Threads?

  Alt 3. Feb 2017, 22:21
Bei Einzeloperationen (Add, Delete usw.) ist dort die Sperre bereits eingebaut,
also Critical Section ala
Delphi-Quellcode:
procedure TTThreadList.Add(Value: Typ);
begin
  Enter;
  try
    inherited Add(Value);
  finally
    Leave;
  end;
end;
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.
$2B or not $2B
  Mit Zitat antworten Zitat
uups

Registriert seit: 23. Aug 2004
68 Beiträge
 
#4

AW: TThreadList und das Verhalten von Threads?

  Alt 3. Feb 2017, 23:28
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.
Da geht es ja auch nicht anders, oder? Die eigentliche Liste ist privat deklariert und wird erst von LockList zur Verfügung gestellt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: TThreadList und das Verhalten von Threads?

  Alt 4. Feb 2017, 02:42
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.
Delphi-Referenz durchsuchenTThreadList.Add und Delphi-Referenz durchsuchenTThreadList.Remove
Add geht immer und Remove sollte ohne Lock natürlich nur verwendet werden, wenn man der einzige Thread ist, der dieses Item besitzt.
$2B or not $2B

Geändert von himitsu ( 4. Feb 2017 um 02:49 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 02:12 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