Ich hätte mir schon vorgestellt dass man es nur unlocken kann wenn man es selbst vorher gelocked hat.
Wenn sich alles in einem Thread abspielt ist alles/jeder "man selbst". Wie definierst du dieses "selbst"?
Im Prinzip müsstest du dem Lock() einen (zufälligen?) Wert übergeben den nur die Methode die das Lock() aufgerufen hat lokal kennt und der dann quasi als eine Art "Password" für das Unlock() fungiert.
Also Uwe's Klasse erweitert:
Delphi-Quellcode:
type
TLock = record
private
FLocked: Boolean;
FPW: Integer;
class function Create: TLock; static;
public
function TryLock(APW: Integer): Boolean;
function Unlock(APW: Integer): Boolean;
property Locked: Boolean read FLocked;
end;
class function TLock.Create: TLock;
begin
Result.FLocked := False;
end;
function TLock.TryLock(APW: Integer): Boolean;
begin
Result := not FLocked;
if (Result) then
begin
FLocked := True;
FPW := APW;
end;
end;
procedure TLock.Unlock(APW: Integer);
begin
Result := APW = FPW;
if Result then
FLocked := False;
end;
Edit: Uwe's Erweiterung unten ist sogar noch einen Tick eleganter
V
V
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."