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.