共用方式為


監視同步處理技術範例

更新:2007 年 11 月

這個範例將示範如何使用 Monitor 類別進行執行緒同步處理。Monitor 型別的靜態函式可用來執行對受保護程式碼區塊的互斥存取。

檢閱原始程式碼和 build.proj 檔案中的註解,以了解執行緒同步處理和 Monitor 類別的相關資訊。

如需使用這些範例的詳細資訊,請參閱下列主題:

Download sample

若要使用命令提示字元建置範例

  1. 開啟 [命令提示字元] 視窗,並巡覽至此範例的任一程式設計語言的子目錄。

  2. 根據您選擇的程式設計語言,在命令列輸入 msbuild MonitorSynchronizationCS.sln 或 msbuild MonitorSynchronizationVB.sln。

若要使用 Visual Studio 建置範例

  1. 開啟 [Windows 檔案總管],並巡覽至此範例的任一程式設計語言的子目錄。

  2. 根據您選擇的程式設計語言,按兩下 MonitorSynchronizationCS.slnMonitorSynchronizationVB.sln 的圖示,在 Visual Studio 中開啟該檔案。

  3. 在 [建置] 功能表上,按一下 [建置方案]。

若要執行範例

  1. 使用命令提示字元巡覽至新的可執行檔所在的目錄。

  2. 在命令列中輸入 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 方法實作非同步方法呼叫。這個範例會使用此方式來執行爭取邏輯資源的程式碼。
  • 委派

請參閱

概念

Managed 執行緒集區

參考

AutoResetEvent 類別

Delegate 類別

Interlocked 類別

Monitor 類別

System.Threading 命名空間

Thread 類別

ThreadPool 類別

ThreadStart 委派

WaitCallback 委派

其他資源

Managed 執行緒

執行緒處理物件和功能