Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   MultiThreading: Suspend/Resume als Alternative zu TCriticalSection (https://www.delphipraxis.net/162174-multithreading-suspend-resume-als-alternative-zu-tcriticalsection.html)

Rob09 10. Aug 2011 17:14

Delphi-Version: 6

MultiThreading: Suspend/Resume als Alternative zu TCriticalSection
 
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 :wink:

(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

sirius 10. Aug 2011 17:19

AW: MultiThreading: Suspend/Resume als Alternative zu TCriticalSection
 
Zitat:

Löst dieses .Suspend & .Resume-Konstrukt denn nun mein Problem?
Nein, steht auch im msdn

Rob09 10. Aug 2011 17:22

AW: MultiThreading: Suspend/Resume als Alternative zu TCriticalSection
 
Okay, vielen Dank für die schnelle Hilfe! :thumb:

Beste Grüße!
Robert

himitsu 10. Aug 2011 18:25

AW: MultiThreading: Suspend/Resume als Alternative zu TCriticalSection
 
Kann auch nicht geht.

Grund:
Über eine CriticalSection hät der Thread an einer definierten stelle an, in weilcer garantiert (sollte zumindestens so sein) kein Zugriff auf das zu Schützende in Bearbeitung ist.

Aber über Supend würdest du den Thread in einem "undefinierten" Zustand anhalten.
Also z.B. auch mitten im Zugriff auf den zu schützenden Teil, womit du diesem dann die Daten unterm Arsch wegziehen/verändern könntest und es nach dem Resume schnell mal knallen kann.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz