Technologiebeispiel für Reader/Writer-Synchronisierung
Aktualisiert: November 2007
In diesem Beispiel wird die Verwendung der ReaderWriterLock-Klasse für die Threadsynchronisierung veranschaulicht. Mit Funktionen vom Typ ReaderWriterLock kann ein Entwickler Code schreiben, der exklusiven Zugriff auf eine gemeinsam genutzte Ressource erzwingt, während ein Thread die Ressource schreibt oder bearbeitet. Beim Lesen oder Abfragen der Ressource kann jedoch nicht exklusiv zugegriffen werden.
Weitere Informationen zur Verwendung der Beispiele finden Sie unter den folgenden Themen:
So erstellen Sie das Beispiel mithilfe der Eingabeaufforderung
Öffnen Sie ein Eingabeaufforderungsfenster, und navigieren Sie zu einem der sprachspezifischen Unterverzeichnisse für das Beispiel.
Geben Sie in der Befehlszeile je nach verwendeter Programmiersprache msbuild ReaderWriterSynchronizationCS.sln oder msbuild ReaderWriterSynchronizationVB.sln ein.
So erstellen Sie das Beispiel mithilfe von Visual Studio
Öffnen Sie Windows Explorer, und navigieren Sie zu einem der sprachspezifischen Unterverzeichnisse für das Beispiel.
Doppelklicken Sie je nach verwendeter Programmiersprache auf das Symbol für ReaderWriterSynchronizationCS.sln oder ReaderWriterSynchronizationVB.sln, um die Datei in Visual Studio zu öffnen.
Klicken Sie im Menü Erstellen auf Projektmappe erstellen.
So führen Sie das Beispiel aus
Navigieren Sie zu dem Verzeichnis, das die neue ausführbare Datei enthält.
Geben Sie ReaderWriter.exe in der Befehlszeile ein.
Hinweis: In diesem Beispiel wird eine Konsolenanwendung erstellt. Sie müssen sie über die Eingabeaufforderung starten, um die Ausgabe anzuzeigen. Beachten Sie beim Ausführen des Beispiels, dass die Start Writing-Ausgabe und die Stop Writing-Ausgabe für jeden Writer nacheinander erfolgen. Grund dafür ist, dass Writer im Gegensatz zu Readern exklusiv auf die Ressource zugreifen.
Hinweise
Weitere Informationen zu Threadsynchronisierung und exklusivem Zugriff finden Sie in den Kommentaren der Quellcode- und der build.proj-Dateien.
In der folgenden Aufzählung sind die in diesem Beispiel verwendeten Klassen und Technologien kurz beschrieben.
- Threadsynchronisierung
ReaderWriterLock – Wird zum Schützen einer logischen Ressource verwendet, die als Aufruf an Sleep implementiert wird. Threads, die den ReaderWriterLock-Typ verwenden, können eine Sperre auf zwei verschiedene Weisen veranlassen. Erstens kann ein Thread eine Lesesperre veranlassen. Diese ist nicht exklusiv und ermöglicht es anderen Threads, eine Lesesperre für die Klasse zu veranlassen. Zweitens kann ein Thread eine Schreibsperre anfordern. Diese ist exklusiv und wird erst veranlasst, wenn aktuelle Lese- und Schreibsperren aufgehoben wurden.
AutoResetEventIn diesem Beispiel wartet der Hauptthread darauf, dass ein AutoResetEvent-Objekt festgelegt wird, das anzeigt, dass die Ausführung der letzten asynchronen Funktion beendet ist.
InterlockedIn diesem Beispiel wird mithilfe der statischen Interlocked.Increment-Methode und Interlocked.Decrement-Methode asynchron auf eine Zählervariable zugegriffen, um anzuzeigen, wann AutoResetEvent festgelegt werden muss.
Threading
- ThreadPool – Entwicklern wird empfohlen, beim Schreiben von verwaltetem Code so oft wie möglich die QueueUserWorkItem-Methode zu 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.