Eigentlich bräuchte man keine Critical Section, so lange es sich wirklich nur um eine Variable handelt, die mit einem einzigen Speicherzugriff geändert wird.
Aber!
In der Regel arbeitet der Thread in einem Arbeitschritt mit mehreren Variablen, deren Inhalt eventuell von einander abhängig ist. Deshalb wird der Zugriff am Anfang für alle Property gesperrt und erst nach der Verarbeitung wieder freigegeben.
Beispiel:
Delphi-Quellcode:
while not Terminated do
begin
FSection.Acquire;
try
{hier die Verarbeitung der Property}
finally
FSection.Release;
end;
Sleep(50);
end;
So eine Klasse kann sich auch mal ändern oder es wird davon abgeleitet.
Deshalb bei Property immer mit einer Critical Section arbeiten.
Oft ist es auch sinnvoll die Section selbst als Property verfügbar zu machen.
Dadurch können mehrere Property ausgewertet oder geändert werden, bevor der Thread weiterarbeitet:
Delphi-Quellcode:
FSubThread.Section.Acquire;
try
if FSubThread.Property1 = ... then
begin
FSubThread.Property2 := ...
FSubThread.Property3 := ...
end;
finally
FSubThread.Section.Release;
end;