Einzelnen Beitrag anzeigen

fuchsle

Registriert seit: 22. Jul 2011
Ort: Heilbronn
35 Beiträge
 
Delphi XE3 Professional
 
#16

AW: Datenaustausch zwischen Threads (Sync)

  Alt 30. Sep 2011, 12:48
Desweiteren brauchst du bei simplen Typen (Integer, ...) nur die Schreibzugriffe schützen.
Und das afaik auch nur, wenn man den Wert vor dem Ändern ausliest, oder?
Wenn es denn eine atomare Änderung ist, braucht die nicht geschützt werden...
Wenn ich nur beim Schreiben schützen muss und nur ein Thread schreibt, so sollte ich mir jeglichen Schutz sparen können?
Geht es nicht darum zu verhindern, dass gelesen wird, wärend geschrieben wird?


Delphi-Quellcode:
function ThreadValue.getNO2_10: Double;
begin
  try
    CSNO2_10.Acquire; // lock out other threads
    Result := FNO2_10;
  finally
    CSNO2_10.Release;
  end;
end;
Das Acquire muss vor das try.
Delphi-Quellcode:
MyCriticalSection.Acquire;
Try
  DoSomethingWhichMightCrash();
Finally
  MyCriticalSection.Release
End;
Habe ich gemacht.
sobald nun über den anderen Thread versucht wird die Property aus zu lesen, wird in der Funktion beim versuch das Aquire zu setzen abgebrochen.

Die allseits beliebte Frage lautet: Welcher Fehler tritt auf?

Desweiteren brauchst du bei simplen Typen (Integer, ...) nur die Schreibzugriffe schützen.
Nur bei Daten, die nicht in einer Aktion geschrieben werden können, sollte man andere lesende Threads aussperren, damit sie keine "halben" Daten lesen.
Fehler: Zugriffsverletzung bei Adresse 005E4D 10 in Modul 'MediaController.exe'. Lesen von Adresse 00000064.

Geändert von fuchsle (30. Sep 2011 um 12:50 Uhr)
  Mit Zitat antworten Zitat