Technologiebeispiel für Monitor-Synchronisierung

Aktualisiert: November 2007

Dieses Beispiel veranschaulicht die Verwendung der Monitor-Klasse für die Threadsynchronisierung. Mithilfe der statischen Funktionen des Monitor-Typs wird wechselseitig exklusiver Zugriff auf einen geschützten Codeblock erzwungen.

Weitere Informationen zur Threadsynchronisierung und zur Monitor-Klasse finden Sie in den Kommentaren der Quellcode- und der build.proj-Dateien.

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 je nach verwendeter Programmiersprache msbuild MonitorSynchronizationCS.sln oder msbuild MonitorSynchronizationVB.sln in der Befehlszeile 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 MonitorSynchronizationCS.sln oder MonitorSynchronizationVB.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 mithilfe der Eingabeaufforderung zu dem Verzeichnis, das die neue ausführbare Datei enthält.

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

Hinweis:

In diesem Beispiel wird eine Konsolenanwendung erstellt. Sie müssen es über die Eingabeaufforderung starten, um die Ausgabe anzuzeigen. Achten Sie beim Ausführen des Beispiels darauf, dass die Ausgabe für "Schreiben starten" und "Schreiben beenden" für jeden Writer nacheinander ohne Überschneidung von Threads mit unterschiedlichen IDs erfolgt. Dies ist dadurch bedingt, dass die Threads über exklusiven Zugriff auf die Ressource verfügen.

Hinweise

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

  • Threadsynchronisierung

    • Monitor – Stellt statische Funktionen bereit, um einen geschützten Codeblock einzugeben und zu beenden. Eine Instanz des Monitor-Typs kann nicht instanziiert werden. Stattdessen übergeben Sie an dessen statische Methoden einen Verweis auf jeden objektabgeleiteten Typ, den Sie als einzelnen Synchronisierungsknoten verwenden möchten.

      Hinweis:

      Visual Basic und C# implementieren spezielle Schlüsselwörter, um die Vorteile der statischen Methoden des Monitor-Typs zu nutzen. C# verwendet das Schlüsselwort lock, und Visual Basic verwendet das Schlüsselwort SyncLock.

    • AutoResetEvent – In diesem Beispiel wartet der Hauptthread darauf, dass ein AutoResetEvent-Objekt festgelegt wird, das anzeigt, dass die Ausführung der letzten asynchronen Funktion beendet ist.

    • Interlocked – In diesem Beispiel wird mithilfe 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. Im Beispiel wird diese Vorgehensweise für das Ausführen von Code verwendet, der um eine logische Ressource konkurriert.
  • Delegaten

    • WaitCallback – Wird verwendet, um eine typsichere Rückrufmethode für den zu verwendenden ThreadPool zu erstellen.

Siehe auch

Konzepte

Verwalteter Threadpool

Referenz

AutoResetEvent-Klasse

Delegatklasse

Interlocked-Klasse

Monitor-Klasse

System.Threading-Namespace

Threadklasse

ThreadPool-Klasse

ThreadStart-Delegat

WaitCallback-Delegat

Weitere Ressourcen

Verwaltetes Threading

Threadingobjekte und -features