Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.435 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Frage zu Critical Sections

  Alt 2. Nov 2009, 08:51
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;
  Mit Zitat antworten Zitat