ThreadPool

05/06/2008 - 17:11 von Christian Havel | Report spam
Hi,

ergànzend zu meiner vorherigen Frage:
Meine Klasse kann von mehreren Threads aufgerufen werden. Ich vermerke mir
die Request-Informationen in einer Queue und syncronisiere mittels lock(..).

Nun soll durch den ThreadPool automatisch die Abarbeitung durchgeführt
werden, wenn ein Thread aus dem ThreadPool verfügbar ist.
Das Hinzufügen in die Warteschlange für den nàchsten Thread kann ich mittels
ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc)); erledigen.
Verstàndnisproblem:
Innerhalb meines Objektes (welches von mehreren Threads aufgerufen wird und
den Request puffert), wird bedingt durch die WaitCallback sobald ein Thread
verfügbar ist, eine Methode aufgerufen, die die Liste aller vermerkten
Requests abarbeitet. Dadurch, dass diese gemeinsame Methode von mehreren
Threads aus dem ThreadPool gleichzeitig aufgerufen werden könnte, müsste
diese auch mittels Lock(..) syncronisiert werden, oder?

Christian
 

Lesen sie die antworten

#1 Elmar Boye
05/06/2008 - 21:51 | Warnen spam
Hallo Christian,

Christian Havel schrieb:
Nun soll durch den ThreadPool automatisch die Abarbeitung durchgeführt
werden, wenn ein Thread aus dem ThreadPool verfügbar ist.
Das Hinzufügen in die Warteschlange für den nàchsten Thread kann ich mittels
ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc)); erledigen.
Verstàndnisproblem:
Innerhalb meines Objektes (welches von mehreren Threads aufgerufen wird und
den Request puffert), wird bedingt durch die WaitCallback sobald ein Thread
verfügbar ist, eine Methode aufgerufen, die die Liste aller vermerkten
Requests abarbeitet. Dadurch, dass diese gemeinsame Methode von mehreren
Threads aus dem ThreadPool gleichzeitig aufgerufen werden könnte, müsste
diese auch mittels Lock(..) syncronisiert werden, oder?



Ich bin mir nicht ganz sicher, ob ich verstehe, was Du da beabsichtigst.
Die Kenntnis, was für Objekte durch Deine Queue rutschen, würde beim
Einsortieren etwas helfen.

Eine Methode als solches wàre nicht zu sperren, denn das ist "nur" Code.
Vielmehr gilt den Zugriff der Daten durch die Methode zu synchronisieren,
wenn sie von mehreren Threads parallel ausgeführt wird.
Dabei sollte soweit als möglich mit threadlokalen Daten gearbeitet werden,
denn je mehr gemeinsame Zugriffe synchronisiert werden müssen, um so
weniger wird die Anwendung von mehreren Threads profitieren.
Und die Wahrscheinlichkeit steigt für Blockierungen, race conditions
abseits von anderen Unannehmlichkeiten:
<URL:http://blogs.msdn.com/oldnewthing/a...9.aspx>

Deswegen verstanden (zumindest soweit wie möglich) solltest Du haben:
<URL:http://msdn.microsoft.com/de-de/lib...0.aspx>
"Empfohlene Vorgehensweise für das verwaltete Threading"

Vorhin noch wiedergefunden und evtl. für Dich hilfreich mag sein:
<URL:http://msdn.microsoft.com/en-us/mag...6.aspx>

Anmerkung: Bei der Leidenschaft von Microsoft regelmàßig umzustrukturieren,
sind viele Verweise dort tot, zu finden über die "Columns" Übersicht:
Für ".NET Matters": <http://msdn.microsoft.com/en-us/mag...01031.aspx

Desweiteren enthàlt Jeffrey Richters "Concurrent Affairs" Kolumne einiges
Interessantes: <URL:http://msdn.microsoft.com/en-us/mag...1.aspx>

Gruß Elmar

Ähnliche fragen