Hallo cSharper,
ich habe eine GUI und zwei Backgroundworker;
und folgende Verständnisfrage:
Für die Zugriffe von den Backgroundworkern auf die Controls der GUI ist ja Invoke/BeginInvoke notwendig, da die Aufrufe der Funktionen der Controls nur von dem Thread aus erfolgen dürfen, der die Controls erstellt hat.
Aber was ist mit der Kommunikation zwischen den beiden Backroundworker ?
Ist es Nicht-Control-Objekten egal welcher Thread zugreift ?
Reicht es da zu locken oder gibt es noch etwas zu beachten ?
Gruß
Michael Schmitz
Prinzipiell müssen mehrere Threads synchronisiert werden, sobald sie gleichzeitig auf eine Ressource lesend oder schreibend zugreifen.
Bei Controls wird über die MessageQueue via Invoke synchroniesiert (Einreihung eines Delegaten in eine Queue).
Greifst du auf gemeinsame Ressourcen, Variablen, Objekte von unterschiedlichen Threads zu (dazu zählt auch der BGW), muss mit lock (meist Standard), Mutex, WaitHandle oder einer anderen Klasse aus System.Threading auf die entsprechende Variable oder Ressource zugegriffen werden.
Allerdings ist Locking teuer, da meist nur ein Thread auf eine Ressource zugreifen darf, die anderen Threads müssen warten. Deshalb sollte der Lock-Bereich so klein wie möglich gehalten werden.
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
Hallo kleines_eichhoernchen,
danke für deine Antwort.
Gruß
Michael Schmitz