Hallo Andreas,
ich habe es so verstanden, dass die Interlocked-Funktionen dafür sorgen, dass die Kommandos zum Bearbeiten einer Integer o. ä. innerhalb einer Zeitscheibe erledigt sind.
Bleibt immer noch die Frage in Verbindung mit Criticalsections:
Muss ein lesender Zugriff in einem Thread auf eine Variable, die von anderen Threads geschrieben wird mit einer Criticalsection umgeben werden?
Folgender Fall für einen Hauptthread, der auf Ergebnisse aus den Subthreads wartet (Beispiel):
Delphi-Quellcode:
bRunning := True;
while bRunning do
begin
i := 0;
while (i < Formulas.Count) do
begin
// FThreadResult sei eine Extended-Variable
// Muss hier eine Criticalsection rein?
if Formulas[i].FThreadResult > 0 then
begin
bRunning := False; // Schleife verlassen, Ergebnis ist da.
end;
inc(i);
end;
end;
Meiner Meinung nach ist es hier nicht nötig eine Criticalsection einzufügen, da die Schleife ja weiter durchlaufen wird, wenn ein Thread gerade die Ergebnisvariable beschreibt und somit der richtige Wert einen Durchlauf später vorhanden ist.
Oder liege ich da falsch und der lesende Zugriff könnte den schreibenden Thread blockieren?
Grüße,
Uwe