Welche Methoden jeweils aufgerufen werden ist egal
Du muß gemeinsam genutzte und nicht threadsichere Variablen/Resourcen gegeneinander absichern.
Beispiel
Delphi-Quellcode:
// threadsave
// Thread 1 greift nur auf Proc zu
// Thread 2 greift nur auf Proc zu
type TMayClass = class
A, B: Integer;
procedure ProcA;
procedure ProcB;
end;
procedure TMyClass.ProcA;
begin
Inc(A);
end;
procedure TMyClass.ProcB;
begin
Inc(B);
end;
Delphi-Quellcode:
// NICHT threadsave
// Thread 1 greift nur auf ProcA zu
// Thread 2 greift nur auf ProcB zu
type TMayClass = class
X: Integer;
procedure ProcA;
procedure ProcB;
end;
procedure TMyClass.ProcA;
begin
Inc(X);
end;
procedure TMyClass.ProcB;
begin
Inc(X);
end;
// aber so wäre es threadsave
var CS: TCriticalSection;
// Thread 1
CS.Enter;
try
MyClass.ProcA;
finally
CS.Leave;
end;
// Thread 2 genauso
...
Delphi-Quellcode:
// threadsave
// Thread 1 greift nur auf Proc(1) zu
// Thread 2 greift nur auf Proc(2) zu
type TMayClass = class
A, B: Integer;
procedure Proc(i: Integer);
end;
procedure TMyClass.Proc(i: Integer);
begin
if i = 1 then Inc(A) else Inc(B);
end;