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.