Einzelnen Beitrag anzeigen

Rob09

Registriert seit: 14. Aug 2007
58 Beiträge
 
Delphi 6 Personal
 
#1

MultiThreading: Suspend/Resume als Alternative zu TCriticalSection

  Alt 10. Aug 2011, 17:14
Delphi-Version: 6
Hi!

Angenommen, man hat neben dem HauptThread einen weiteren NebenThread, der ständig irgendwelche Variablen verändert. Nun möchte der HauptThread ab und zu auf diese zugreifen. Das ist deshalb wohl problematisch, weil es sein könnte, dass der NebenThread eine Variable noch nicht vollständig geschrieben hat, wenn der HauptThread darauf zugreifen möchte (Zeitscheibe & Zuteilung von CPU-Zeit usw.) - falls ich das soweit richtig verstanden habe.

Wenn ich nun vor bzw. nach dem Lesezugriff des HauptThread auf eine Variable des NebenThread aber die Zeilen "NebenThread.Suspend;" bzw. "NebenThread.Resume;" schreibe... Die Frage ist jetzt, ob der HauptThread beim Befehl "NebenThread.Suspend;" nun wartet, bis der NebenThread wieder an der Reihe ist, die Variable fertig geschrieben hat und in den suspendierten Zustand wechselt, oder ob der NebenThread quasi suspendiert wird, ohne die Variable fertig zu schreiben, und diese dann erst beim Resume fertig schreibt. In dem Fall würde mein HauptThread trotzdem auf eine fehlerhafte Variable zugreifen...

Löst dieses .Suspend & .Resume-Konstrukt denn nun mein Problem? Hoffe, ich habe mich einigermaßen verständlich ausgedrückt

(Die Alternative mit TCriticalSection ist mir bekannt. Diese Variante hier wäre mir in diesem speziellen Fall aber - falls sie funktioniert - lieber.)

Beste Grüße!
Robert
  Mit Zitat antworten Zitat