AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TThreadList.LockList

Ein Thema von DataCool · begonnen am 2. Okt 2003 · letzter Beitrag vom 2. Okt 2003
Antwort Antwort
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#1

TThreadList.LockList

  Alt 2. Okt 2003, 18:01
Hi Leute,

zwei Fragen beide zu TThreadList.LockList :

1. Was passiert wenn ein Thread die ThreadList mit Locklist gesperrt hat und ein anderer Thread kurz danach die Liste speeren will ? Warte der dann solange bis die Liste wieder entsperrt ist ?

2. Wenn ich irgentwo in meinem Sourcecode zum LockList das unlock vergessen habe, wie verhalten Sie dann die anderen Threads die auf diese Liste zugreifen wollen ? Gibt's für die Sperrung eine Art Sicherheits-Timeout ?
Oder einmal gesperrt und nicht freigegeben = nicht erreichbar für die anderen Threads ?

Gruß Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: TThreadList.LockList

  Alt 2. Okt 2003, 18:50
Zu 1.) Ein Thread kann nur etwas sperren, wenn er Zugriff darauf hat, da das Objekt gesperrt ist, kann der zwiete Thread nicht draufzugreifen und es sperren.

Zu 2. würde ich sagen, dann hast du dir ein Deadlock gebaut. Sprich alle Threads, die auf deine Liste zugreifen wollen, warten sich zu tode.

Beides sagt mir eigentlich mehr mein gesunder Programmiererverstand.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: TThreadList.LockList

  Alt 2. Okt 2003, 20:45
Hi Luckie,

es geht mir um folgenden Source :

Code:
procedure TUserList.Clear;
Var i : Longint;
      tmpUser : TUser;
      TmpList : TList;
begin
   TmpList := fTL.LockList;
   try
      for i:= 0 to TmpList.Count - 1 do begin
         if TmpList[i] <> Nil then begin
            tmpUser := TUser(TmpList[i]);
            tmpUser.Free;
            TmpList[i] := Nil;
         end;
      end;
      TmpList.Pack;
   finally
      fTL.UnlockList;
   end;
end;
Genauso wird aus einen anderen Thread :

Code:
procedure TUserList.Delete(user: TUser);
begin
   ftl.Remove(user);
   if user <> nil then
      user.free;
end;
Worum es mir bei Frage 1 ging ist :
was passiert wenn aus Thread 1 clear aufgerufen wird und Thread 2 delete aufruft, obwohl Thread 1 mit clear noch nicht fertig ist. Ist die Liste von Thread 1 noch gelockt, wie reagiert Thread 2 ?
Das Remove versucht ja auch die Liste zu sperren ! Wird der Eintrag dann entfernt ? Wartet der Zeit solange bis er die Liste sperren kann und macht dann weiter ?

Gruß Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: TThreadList.LockList

  Alt 2. Okt 2003, 22:37
Moin DataCool,

warum schaust Du Dir nicht die internen Abläufe in der Unit classes.pas an?
Die müsste bei Deiner Enterprise Version dabei sein.

Um's kurz zu machen:
LockList ruft intern EnterCriticalSection auf und sperrt damit die Liste.
Remove versucht das auch indem die Methode LockList aufruft, und muss warten, bis die Liste wieder freigegeben ist.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  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 13: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