Gemeinsam verwendete Resourcen/Variablen etc. sollten für den Zugriff grundsätzlich gekapselt werden, so etwa:
Delphi-Quellcode:
Procedure ThreadsafeSetValue (aMyValue : TSomeType);
Begin
myCS.Enter;
Try
fValue := aMyValue; // Na ja, fValue.Assign bei Objekten
Finally
myCS.Leave;
End
End;
Procedure ThreadsafeGetValue (Var aMyValue : TSomeType);
Begin
myCS.Enter;
Try
aMyValue := fValue;
Finally
myCS.Leave;
End
End;
Wenn Du das als Get/Set-Methoden einer Eigenschaft implementierst, ist der Zugriff darauf sicher. Zum Verständnis: Eine Critical Section hält nicht etwa alle anderen Threads an, sondern sorgt dafür, das ein zweiter Aufruf von myCS.Enter so lange wartet, bis der erste Aufrufer myCS.Leave aufgerufen hat. Der erste Aufruf von myCS.Enter schließt sozusagen eine Tür von *innen*. myCS.Leave öffnet sie wieder.