Monitor.Pulse(Object) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
通知等待佇列中的執行緒鎖定物件狀態變更。
public:
static void Pulse(System::Object ^ obj);
public static void Pulse(object obj);
static member Pulse : obj -> unit
Public Shared Sub Pulse (obj As Object)
參數
- obj
- Object
執行緒正在等待的物件。
例外狀況
參數 obj 為 null。
呼叫執行緒不擁有指定物件的鎖。
備註
只有目前擁有鎖的人才能用 向等待的物體發出信號 Pulse。
目前擁有指定物件鎖的執行緒會呼叫此方法,通知下一個執行緒的鎖。 收到脈衝後,等待的執行緒會被移至準備佇列。 當呼叫 Pulse 的執行緒釋放鎖時,準備佇列中的下一個執行緒(不一定是被脈衝的執行緒)會取得鎖。
Important
該 Monitor 類別不會維持表示該方法已被呼叫的狀態 Pulse 。 因此,如果你在沒有執行緒等待時呼叫 Pulse ,下一個呼叫 Wait 的執行緒會像 Pulse 從未被呼叫過一樣阻塞。 如果兩個執行緒同時使用 Pulse 和 Wait 來互動,可能會導致死結。 與此形成對比的是類別的行為AutoResetEvent:若你呼叫 Set a AutoResetEvent 的方法,且沒有執行緒等待,該AutoResetEvent類別會保持訊號狀態,直到執行緒呼叫 WaitOne、 WaitAny或 WaitAll。 它 AutoResetEvent 會釋放該執行緒,回到未訊號狀態。
請注意,同步物件會保留多個參考,包括目前持有鎖的執行緒參考、準備佇列(包含準備取得鎖的執行緒)以及等待佇列(等待物件狀態變更通知的執行緒)的參考。
必須在同步處理的程式代碼區塊內叫用Pulse、PulseAll和Wait方法。
要標示多條線程,請使用該 PulseAll 方法。