Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Warum funktioniert das? (Threads) (https://www.delphipraxis.net/66747-warum-funktioniert-das-threads.html)

Patrick 3. Apr 2006 15:43


Warum funktioniert das? (Threads)
 
Hallo,

Ich habe mich auf Delphi-Source mal durch die Threads gearbeitet. (Link)
Da steht jetzt: "Während ein Thread die Daten verändert, darf kein zweiter Thread die Daten lesen."
Komisch, bei mir funktioniert's!

Ich habe ein Memo, in dem ein Text steht. der Thread wird gestartet und gibt mir nun den Text als Morsecode aus. Dabei markiert er mir den Buchstaben, bei dem er gerade ist.(Ich habe ihn auch testweise mal Buchstaben hinzufügen lassen) Wieso kann ich in da trotzdem rumpfuschen?

P.S.: Ich arbeite mit dem TThread aus der VCL!

Luckie 3. Apr 2006 15:45

Re: Warum funktioniert das? (Threads)
 
Es heißt ja nicht, dass es nicht ginge. Nur kannst du dich dann nicht mehr darauf verlassen, dass die Daten dann noch konsistent sind.

alzaimar 3. Apr 2006 16:39

Re: Warum funktioniert das? (Threads)
 
Zitat:

Zitat von Patrick
...Da steht jetzt: "Während ein Thread die Daten verändert, darf kein zweiter Thread die Daten lesen."
Komisch, bei mir funktioniert's!

Du darfst ja auch nicht klauen, aber wenn Du's doch versuchst, funktioniert es doch trotzdem :mrgreen:

Ich würde mal so sagen: Lesen kannst Du immer, insofern ist das Tutorial an der Stelle vielleicht etwas zu pingelig.

Aber beim Schreiben wirds haarig. Wenn zwei Threads eine gemeinsame Variable munter hochzählen, sollte nach 10 Schritten je Thread die Zahl um 20 höher sein. Ist sie aber nicht, außer man kapselt das Hochzählen in Critial Sections.

Elvis 3. Apr 2006 16:46

Re: Warum funktioniert das? (Threads)
 
Zitat:

Zitat von alzaimar
Ich würde mal so sagen: Lesen kannst Du immer, insofern ist das Tutorial an der Stelle vielleicht etwas zu pingelig.

Aber beim Schreiben wirds haarig. Wenn zwei Threads eine gemeinsame Variable munter hochzählen, sollte nach 10 Schritten je Thread die Zahl um 20 höher sein. Ist sie aber nicht, außer man kapselt das Hochzählen in Critial Sections.

Thread a liest Variable X, Thread b schreibt einen Wert hinein.
Thread b sperrt die Variable.
Thread a hat keinen Plan dass es diese Sperre gibt.
Thread a liest X während b hineinschreibt.
a bekommt einen "halben" Wert, eine Hälfte geändert von b, die andere Hälfte noch wie vorher. Aber definitiv nicht das was a hätte lesen sollen. ;)
Vllt bin ich etwas zu sehr .Net-versaut und die Sperre von b gilt doch für a... :freak:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:08 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