Monitor.Pulse(Object) 方法

定義

通知等候佇列中的執行緒,鎖定物件的狀態有所變更。

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 ,則呼叫區塊的下一個執行緒 WaitPulse 如同從未呼叫過一樣。 如果兩個執行緒正在使用 PulseWait 進行互動,這可能會導致死結。 將此與 類別的行為 AutoResetEvent 相比較:如果您藉由呼叫 其 Set 方法發出訊 AutoResetEvent 號,而且沒有任何執行緒等候,則 AutoResetEvent 會線上程呼叫 WaitOneWaitAnyWaitAll 之前維持處於訊號狀態。 釋放 AutoResetEvent 該執行緒,並返回未簽署的狀態。

請注意,同步處理的物件會保存數個參考,包括目前保存鎖定的執行緒參考、就緒佇列的參考,其中包含準備好取得鎖定的執行緒,以及等候佇列的參考,其中包含正在等候物件狀態變更通知的執行緒。

Pulse必須在已同步處理的程式碼區塊內叫用 、 PulseAllWait 方法。

若要發出多個執行緒的訊號,請使用 PulseAll 方法。

適用於

另請參閱