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
用的執行緒釋放鎖定時,就緒佇列中的下一個執行緒 (這不一定是) 執行緒取得鎖定。
重要
類別 Monitor 不會維護狀態, Pulse 指出已呼叫 方法。 因此,如果您在未等候任何執行緒時呼叫 Pulse ,則呼叫區塊的下一個執行緒 Wait 就 Pulse 如同從未呼叫過一樣。 如果兩個執行緒正在使用 Pulse 和 Wait 進行互動,這可能會導致死結。 將此與 類別的行為 AutoResetEvent 相比較:如果您藉由呼叫 其 Set 方法發出訊 AutoResetEvent 號,而且沒有任何執行緒等候,則 AutoResetEvent 會線上程呼叫 WaitOne 、 WaitAny 或 WaitAll 之前維持處於訊號狀態。 釋放 AutoResetEvent 該執行緒,並返回未簽署的狀態。
請注意,同步處理的物件會保存數個參考,包括目前保存鎖定的執行緒參考、就緒佇列的參考,其中包含準備好取得鎖定的執行緒,以及等候佇列的參考,其中包含正在等候物件狀態變更通知的執行緒。
Pulse
必須在已同步處理的程式碼區塊內叫用 、 PulseAll 和 Wait 方法。
若要發出多個執行緒的訊號,請使用 PulseAll 方法。