Zitat von
blablab:
Der integer wird doch in einem Schritt hingeschrieben und nicht erst die erste hälte und dann die zweite hälfte des integers. wie kann dann da n fehler auftreten?
Wenn der Integer auf einer durch 4 Byte teilbaren Speicheradresse liegt, dann klappt das schon. Tut er das aber nicht, dann braucht der Befehl zwei
RAM Zugriffe zum lesen. Und dazwischen ist es möglich, dass eine zweite CPU den zweiten Teil des Integers gerade neu beschreibt und man am Schluss ein Mischmasch aus altem und neuem Wert hat. (nur mal so als Beispiel)
Für Integer-Variablen braucht man aber nicht gleich zu Synchronize greifen. Hierfür gibt es die Interlock-Funktionen. InterlockIncrement, InterlockDecrement, InterlockExchange (kann man für die Zuweisung "misbrauchen"), ...
Des weiteren gibt es noch CriticalSections. Nur wenn man irgendwas mit der
VCL (TForm, TControl, ...) anstellt ist der Weg über Synchronize notwendig, weil sämtliche Zugriffe auf Window-Handles, dank der Thread-Affinität, im Hauptthread/
VCL-Thread auszuführen sind.