Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.025 Beiträge
 
Delphi 12 Athens
 
#2

AW: TThread.synchronize atomar?

  Alt 18. Aug 2022, 15:09
Läuft die Prozedur in "TThread.Synchronize(nil, procedure ...)" im Hauptthread atomar ab oder kann da ein anderer Thread durch synchronize "dazwischen grätschen"?
In einem Thread läuft immer alles atomar ab, wobei das hier der falsche Ausdruck ist. Da kann nichts dazwischen grätschen (wenn man von Hardware Interrupts und ähnlichem absieht). Synchronize setzt bildlich gesprochen ein Flag das der Hauptthread zyklisch abprüft und den entsprechenden Code ausführt. Der aufrufende Thread wartet solange. Wenn mehrere Threads ein Synchronize aufrufen (jeder kann nur eins), werden die im Hauptthread sequentiell abgearbeitet - wie alles in einem Thread.

Von atomar spricht man im Zusammenhang mit Zugriff auf gemeinsame Ressourcen (z.B. einer Variable). Hier gilt eine Operation als atomar, wenn sie durch keinen anderen Thread unterbrochen werden kann, womit das Resultat verfälscht werden könnte.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat