Verwenden von Threading (C#-Programmierhandbuch)

Aktualisiert: November 2007

Standardmäßig besitzt ein C#-Programm einen Thread. Dieser Thread führt den Code im Programm aus, wobei er mit der Main-Methode beginnt und endet. Jeder von Main – entweder direkt oder indirekt – ausgeführte Befehl wird vom Standardthread bzw. primären Thread durchgeführt, und dieser Thread wird beendet, wenn Main zurückgegeben wird. Es können jedoch Hilfsthreads erstellt und verwendet werden, um parallel zum primären Thread Code auszuführen. Diese Threads werden häufig als Arbeitsthreads bezeichnet.

Mithilfe von Arbeitsthreads können Sie zeitaufwändige oder zeitkritische Aufgaben durchführen, ohne den primären Thread zu binden. Arbeitsthreads werden häufig in Serveranwendungen verwendet, um eingehende Anforderungen zu erfüllen, ohne darauf warten zu müssen, dass die vorherige Anforderung abgeschlossen ist. Arbeitsthreads werden auch verwendet, um "Hintergrundaufgaben" in Desktopanwendungen durchzuführen, damit der Hauptthread, der die Elemente der Benutzeroberfläche steuert, weiterhin auf Benutzeraktionen reagieren kann.

Multithreading löst einerseits Probleme mit Durchsatz und Reaktionsgeschwindigkeit, kann andererseits aber auch Probleme mit der gemeinsamen Nutzung von Ressourcen wie Deadlocks und Racebedingungen verursachen. Die Verwendung mehrerer Threads ist gut geeignet für Aufgaben, bei denen verschiedene Ressourcen benötigt werden, z. B. Dateihandles und Netzwerkverbindungen. Das Zuweisen von mehreren Threads zu einer einzelnen Ressource führt mit hoher Wahrscheinlichkeit zu Synchronisierungsproblemen, und wenn die Threads häufig blockiert sind und warten, wird dadurch der Vorteil der Verwendung von mehreren Threads zunichte gemacht.

Eine häufige verwendete Strategie besteht darin, zeitaufwändige und zeitkritische Aufgaben, bei denen nur wenige der von den anderen Threads verwendeten Ressourcen benötigt werden, auf Arbeitsthreads durchzuführen. Natürlich muss auf einige Ressourcen im Programm mit mehreren Threads zugegriffen werden. Für diese Fälle stellt der System.Threading-Namespace Klassen zum Synchronisieren von Threads bereit. Diese Klassen umfassen Mutex, Monitor, Interlocked sowie und AutoResetEvent und ManualResetEvent.

Sie können einige dieser Klassen bzw. alle diese Klassen verwenden, um die Aktivitäten von mehreren Threads zu synchronisieren. C# bietet jedoch auch im begrenzten Umfang Unterstützung für Multithreading. Die Lock-Anweisung von C# stellt beispielsweise Synchronisierungsfeatures durch implizite Verwendung von Monitor bereit.

In den folgenden Themen werden allgemeine Multithreadingtechniken veranschaulicht:

Verwandte Abschnitte

Weitere Informationen finden Sie unter folgenden Themen:

Siehe auch

Aufgaben

Technologiebeispiel für Monitor-Synchronisierung

Technologiebeispiel für Wait-Synchronisierung

Beispiel für Threading

Konzepte

C#-Programmierhandbuch

Monitore

Interlocked-Vorgänge

AutoResetEvent

Referenz

Thread

Mutex

Weitere Ressourcen

Verwaltetes Threading

Verwenden von Threads und Threading

Threadbeispiele