監視同步處理技術範例
更新:2007 年 11 月
這個範例將示範如何使用 Monitor 類別進行執行緒同步處理。Monitor 型別的靜態函式可用來執行對受保護程式碼區塊的互斥存取。
檢閱原始程式碼和 build.proj 檔案中的註解,以了解執行緒同步處理和 Monitor 類別的相關資訊。
如需使用這些範例的詳細資訊,請參閱下列主題:
若要使用命令提示字元建置範例
開啟 [命令提示字元] 視窗,並巡覽至此範例的任一程式設計語言的子目錄。
根據您選擇的程式設計語言,在命令列輸入 msbuild MonitorSynchronizationCS.sln 或 msbuild MonitorSynchronizationVB.sln。
若要使用 Visual Studio 建置範例
開啟 [Windows 檔案總管],並巡覽至此範例的任一程式設計語言的子目錄。
根據您選擇的程式設計語言,按兩下 MonitorSynchronizationCS.sln 或 MonitorSynchronizationVB.sln 的圖示,在 Visual Studio 中開啟該檔案。
在 [建置] 功能表上,按一下 [建置方案]。
若要執行範例
使用命令提示字元巡覽至新的可執行檔所在的目錄。
在命令列中輸入 Monitor.exe。
注意事項: |
---|
這個範例會建置一個主控台應用程式。您必須使用 [命令提示字元] 啟動,才能檢視它的輸出。執行範例時,請注意每個寫入器的 "Start Writing" 和 "Stop Writing" 輸出,它們會從不同 ID 的執行緒相繼發生且不重疊。這是因為這些執行緒握有資源的獨佔存取權。 |
備註
下面幾點簡短說明了此範例所使用的類別和技術。
執行緒同步處理
Monitor 提供進入及結束受保護程式碼區塊的靜態函式。您無法具現化 Monitor 型別的執行個體。而是必須將想要做為同步處理單一節點之物件衍生型別的參考,傳遞給其靜態方法。
注意事項: Visual Basic 和 C# 都實作了特殊關鍵字,以利用 Monitor 型別的靜態方法。C# 使用 lock 關鍵字,而 Visual Basic 則使用 SyncLock 關鍵字。
AutoResetEvent 這個範例的主執行緒會等到 AutoResetEvent 物件設定為止,表示最後一個非同步函式已完成工作。
Interlocked 這個範例會使用靜態 Decrement 方法,以非同步方式存取計數器變數,以指示設定 AutoResetEvent 的時機。
執行緒處理
- ThreadPool 撰寫 Managed 程式碼時,建議開發人員盡可能使用 QueueUserWorkItem 方法實作非同步方法呼叫。這個範例會使用此方式來執行爭取邏輯資源的程式碼。
委派
- WaitCallback 用來建立型別安全的回呼方法,供 ThreadPool 使用。