Technologiebeispiel für Wait-Synchronisierung

Aktualisiert: November 2007

Dieses Beispiel veranschaulicht die Verwendung der WaitHandle-Klasse für die Threadsynchronisierung. Mit dem von WaitHandle abgeleiteten Mutex-Typ wird ein wechselseitig exklusiver Zugriff auf einen geschützten Codeblock erzwungen.

Weitere Informationen zur Verwendung der Beispiele finden Sie unter den folgenden Themen:

Download sample

So erstellen Sie das Beispiel mithilfe der Eingabeaufforderung

  1. Öffnen Sie ein Eingabeaufforderungsfenster, und navigieren Sie zu einem der sprachspezifischen Unterverzeichnisse für das Beispiel.

  2. Geben Sie in der Befehlszeile je nach verwendeter Programmiersprache msbuild WaitSynchronizationCS.sln oder msbuild WaitSynchronizationVB.sln ein.

So erstellen Sie das Beispiel mithilfe von Visual Studio

  1. Öffnen Sie Windows Explorer, und navigieren Sie zu einem der sprachspezifischen Unterverzeichnisse für das Beispiel.

  2. Doppelklicken Sie je nach verwendeter Programmiersprache auf das Symbol für WaitSynchronizationCS.sln oder WaitSynchronizationVB.sln, um die Datei in Visual Studio zu öffnen.

  3. Klicken Sie im Menü Erstellen auf Projektmappe erstellen.

So führen Sie das Beispiel aus

  1. Navigieren Sie zu dem Verzeichnis, das die neue ausführbare Datei enthält.

  2. Geben Sie in der Befehlszeile Mutex.exe ein.

    Hinweis:

    In diesem Beispiel wird eine Konsolenanwendung erstellt. Sie müssen es von einem Konsolenfenster aus starten, um die Ausgabe anzuzeigen.

Hinweise

In diesem Beispiel befinden sich fünf asynchrone Methodenaufrufe in der Warteschlange. Jede Methode durchläuft folgende Schritte: Warten auf die Übernahme des Ressourcenbesitzes, Schreiben in die Konsole, vorübergehende Deaktivierung und erneutes Schreiben in die Konsole.

In der folgenden Aufzählung sind die in diesem Beispiel verwendeten Technologien und Klassen kurz beschrieben:

  • Threadsynchronisierung

    • Mutex – Stellt gegenseitigen Ausschluss für die Threadsynchronisierung bereit.

    • AutoResetEvent – Der Hauptthread in diesem Beispiel wartet auf ein AutoResetEvent, bis dieses festgelegt wird. Dies gibt an, dass die letzte der asynchronen Funktionen erfolgreich ausgeführt wurde.

    • WaitHandle – Die WaitHandle-Klasse ist die Basisklasse, von der (neben anderen) sowohl die Mutex-Klasse als auch die AutoResetEvent-Klasse abgeleitet werden. Dieser Typ implementiert Methoden so, dass sie darauf "warten", bis die verschiedenen abgeleiteten Typen in den aktivierten Status versetzt werden.

    • Interlocked – In diesem Beispiel wird mit der statischen Decrement-Methode asynchron auf eine Zählervariable zugegriffen, um anzuzeigen, wann AutoResetEvent festgelegt werden muss.

  • Threading

    • ThreadPool – Beim Schreiben von verwaltetem Code sollten Entwickler so oft wie möglich die QueueUserWorkItem-Methode verwenden, um asynchrone Methodenaufrufe zu implementieren. In diesem Beispiel wird diese Vorgehensweise zum Ausführen von Code verwendet, der um eine logische Ressource konkurriert.
  • Delegaten

    • WaitCallback – Wird verwendet, um eine typsichere Rückrufmethode für die zu verwendende ThreadPool-Klasse zu erstellen.

Weitere Informationen zu Threads und Synchronisierung finden Sie in den Kommentaren der Quellcode- und build.proj-Dateien.

Siehe auch

Konzepte

Threads und Threading

Referenz

AutoResetEvent

Delegate

Interlocked

Mutex

System.Threading

ThreadPool

WaitCallback

WaitHandle

Weitere Ressourcen

Threadingobjekte und -features