Einzelnen Beitrag anzeigen

mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#7

AW: Datenaustausch zwischen Thread und Hauptprogramm

  Alt 4. Dez 2012, 12:08

Code:
function GetConneted(): Boolean
begin
  Result:=ComConnected; // Nicht Syncronisiert!!!
end;
Und hier liegt der Hase im Pfeffer!
Diese Übergabe ist nicht syncronisiert. Und nun?
Ob das ein Problem in der Threadsicherheit darstellt, kann man mit diesem Codeausschnitt noch nicht klar sagen.

Wenn der Hauptthread die GetCinneted Funktion des Threads aufruft, kann der Hauptthread nur davon ausgehen, dass er soeben den in diesem Moment aktuellen Zustand (ComConnected) erhalten hat. Wenn der Hauptthread sich im weiteren Verlauf auf diesen Status verlässt, kann es im Thread inzwischen schon anders aussehen. (Hauptthread könnte in der falschen Annahme, der Thread sei immer noch ComConnected, in Probleme hineinlaufen wenn die Verbindung inzwischen getrennt wurde). Um das zu verhindern, müsste man den gesamten Codeblock im Hauptthread in eine Critical Section bringen...

Es hilft nicht, einfach nur den Getter zu synchronisieren. Um zu beurteilen ob der Code threadsicher ist, kommt es auf den weiteren Ablauf der Kommunikation zwischen den Threads an.
Michael Justin
  Mit Zitat antworten Zitat