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.