Der Einwand ist berechtigt, jedoch das Problem ist eher theoretisch, denn eine CS für eine Instanz sollte so implementiert werden:
Delphi-Quellcode:
constructor TMyThreadA.Create( CreateSuspended : Boolean );
begin
CS.Enter; // erster Aufruf für die neue Instanz
try
inherited; // ab jetzt gibt es eine Instanz
finally
CS.Leave;
end;
end;
Ein Durcheinander kann somit nur dann auftreten, wenn ich es schaffe von 2 unterschiedlichen Threads die
gleiche Objekt-Instanz zu erzeugen.
Und das ist meines Wissens nicht möglich.
Um auch diesen theoretischen Fall abzusichern, könnte man noch eine CS für die
Unit verwenden, die dieses dann regeln würde.
Delphi-Quellcode:
unit uCSObjects;
interface
[...]
implementation
var
__CS : ICriticalSection;
// Eine CriticalSection für diese Unit
{ TInterfacedCriticalSection }
[...]
{ TCSThread }
function TCSThread.CS : ICriticalSection;
begin
__CS.Enter;
try
if not Assigned( _CS )
then
_CS := TInterfacedCriticalSection.Create;
finally
__CS.Leave;
end;
Result := _CS;
end;
initialization
__CS := TInterfacedCriticalSection.Create;
end.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)