Thread und Verwendung von Daten aus dem Hauptprogramm
-
Ich hoffe ich bin hier richtiger als im VCL Forum, denn eigentlich handelt es sich nicht um ein Problem der VCL sondern um ein Grundsätzliches.
Mein Hauptprogramm erzeugt eine "große" verkettete Liste zur Aufnahme von Daten. Diese Liste wird bei Programmstart errechnet und ist ab diesem Zeitpunkt unverändert.
Nun erzeuge ich weitere Threads der denen Berechnungen vorgenommen werden. Dazu Nutzten diese Threads auch Daten aus dieser Liste.
Muss ich nun
a) Die Liste mehrmals kopieren und die Kopie den Threads mitgeben
b) Muss ich bei jedem Zugriff vom Thread aus die Globale Liste sperren (VCL bietet Syncronize, oder mit Mutex)
c) oder kann ich per globale Variable einfach auf die Daten der Liste aus den Threads zugreifen.Variante c ist natürlich am schönsten, aber ist sie auch sicher?
-
Du kannst einen Zeiger auf die Liste den Threads bei Erstellung übergeben und somit problemlos Daten innerhalb der Threads lesen, schreiben jedoch ist unsicher, dafür sollte du einen Mutex verwenden.
-
Du kriegst erst ein Problem, sobald einer schreibt und gleichzeitig ein zweiter dieselben Daten liest oder schreibt.
Sobald deine Liste konstant bleibt ist alles sicher und alle können gleichzeitig drauf zugreifen, denn keiner kann mehr schreiben, also gibt es kein Problem.
Zu b: Dein Text suggeriert, dass die Liste dem Hauptprogramm gehören würde und Zugriffe vom Thread aus synchronisiert werden müssten. Tatsächlich sind aber beide Threads gleichwertig. Wenn du b wählst musst du natürlich auch alle Zugriffe vom Hauptprogramm mit demselben Mutex schützen.
-
Youka schrieb:
Du kannst einen Zeiger auf die Liste den Threads bei Erstellung übergeben und somit problemlos Daten innerhalb der Threads lesen, schreiben jedoch ist unsicher, dafür sollte du einen Mutex verwenden.
Lesen ist auch unsicher, sobald irgendwer schreibt.
Sobald also jmd. schreiben kann reicht es nicht die Schreibzugriffe zu synchronisieren, sondern dann muss man *alle* Zugriffe synchronisieren.