Delphi-Quellcode:
function TMyThreadA.CS: TCriticalSection;
var
Comp: TCriticalSection;
begin
Result := _CS;
if not Assigned(Result) then begin
Result := TCriticalSection.Create;
Comp := InterlockedCompareExchangePointer(Pointer(_CS), Pointer(Result), nil);
if Assigned(Comp) then begin
Result.Free;
Result := Comp;
end;
end;
end;
Braucht keine zusätzliche CS.
Nur im Destructor, vor dem Freigeben der CS, diese dort besser nochmal mal sperren.
Nicht daß sie noch in Benutzung ist, beim Freigeben.
Ein Therapeut entspricht 1024 Gigapeut.