In
diesem Thread schreibt Luckie:
Zitat von
Luckie:
Zitat:
BeginThread setzt die globale Variable IsMultiThread auf True und macht so Zugriffe auf den Heap so threadsafe
Zitat von
Luckie:
Der Heap ist ein Speicherbereich im Adressraum des Prozesses, wie der Stack auch, nur dass er etwas anders organisiert ist. Wenn ich jetzt eine multithread Anwendung habe und ein Thread schreibt etwas in den Heap und ein anderer Thread liest gerade zufälligerweise an der gleichen Adresse, kann es passieren, dass der lesende Thread die Daten in einem inkonsistenten Zustand vor findet. Threadsafe bedeutet hier, dass jegliche Zugriffe auf den Heap atomare Operationen sind. Das heißt, wenn ein Thread auf den Heap zugreift, ist er für andere gesperrt.
Zitat von
Chewie:
Welche Daten sind denn im Heap abgelegt?
Zitat von
Luckie:
Globale Variablen zum Beispiel
Wenn das stimmt, dann ist jeder Zugriff eines TThread-Nachfahren auf globale Variablen ohne weiteres Zutun threadsafe.
Wegen der threadvars: Wenn ich die Variablen so deklariere:
Delphi-Quellcode:
threadvar
TotalBytesRec : Int64;
LastTotalBytesRec : Int64;
dann bleibt jeder Schreibzugriff aus den Threads heraus wirkungslos. Ich muss da irgendwas falsch verstanden haben.
Gruß,
Dani
Dani H.