讀取器-寫入器同步處理技術範例
更新:2007 年 11 月
這個範例說明 ReaderWriterLock 執行緒同步處理類別的用法。ReaderWriterLock 型別的功能讓開發人員能夠撰寫在執行緒正在寫入或修改資源時,對共用資源執行獨佔存取,但在讀取或查詢資源時則允許非獨佔存取的程式碼。
如需使用這些範例的詳細資訊,請參閱下列主題:
若要使用命令提示字元建置範例
開啟 [命令提示字元] 視窗,並巡覽至此範例的任一程式設計語言的子目錄。
根據您選擇的程式設計語言,在命令列輸入 msbuild ReaderWriterSynchronizationCS.sln 或 msbuild ReaderWriterSynchronizationVB.sln。
若要使用 Visual Studio 建置範例
開啟 [Windows 檔案總管],並巡覽至此範例的任一程式設計語言的子目錄。
根據您選擇的程式設計語言,按兩下 ReaderWriterSynchronizationCS.sln 或 ReaderWriterSynchronizationVB.sln 的圖示,在 Visual Studio 中開啟該檔案。
按一下 [建置] 功能表上的 [建置方案],
若要執行範例
巡覽至新的可執行檔所在的目錄。
在命令列中輸入 ReaderWriter.exe。
注意事項: 這個範例會建置一個主控台應用程式。您必須從命令提示字元啟動,才能檢視它的輸出。執行此範例時請注意,每個寫入器 (Writer) 的 [開始寫入] 和 [停止寫入] 輸出會連續發生。這是因為寫入器對資源有獨佔存取權,這一點和讀取器 (Reader) 不同。
備註
如需執行緒同步處理和獨佔存取的詳細資訊,請參閱原始程式碼中的註解和 build.proj 檔案。
下面幾點簡短說明了此範例所使用的類別和技術。
- 執行緒同步處理
ReaderWriterLock用來保護實作為對 Sleep 之呼叫的邏輯資源。使用 ReaderWriterLock 型別的執行緒可以利用兩種不同的方式維持鎖定。第一種是執行緒可以維持非獨佔模式的讀取鎖定,然後讓其他執行緒取得類別的讀取鎖定。第二種是執行緒可以要求具有獨佔特性的寫入鎖定,在目前維持的讀取和寫入鎖定獲得釋放之前,執行緒都無法取得存取權。
AutoResetEvent這個範例的主執行緒會等到 AutoResetEvent 物件設定為止,表示最後一個非同步函式已完成工作。
Interlocked這個範例會使用靜態 Interlocked.Increment 和 Interlocked.Decrement 方法,以非同步方式存取計數器變數,以指示設定 AutoResetEvent 的時機。
執行緒處理
- ThreadPool 撰寫 Managed 程式碼時,建議開發人員盡可能使用 QueueUserWorkItem 方法實作非同步方法呼叫。這個範例使用此方式來執行想爭取成為邏輯資源的程式碼。
委派
- WaitCallback 用來建立型別安全的回呼方法供 ThreadPool 類別使用。