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 하는 경우 호출 Wait 하는 다음 스레드는 호출되지 않은 것처럼 Pulse 차단됩니다. 두 스레드가 사용하고 PulseWait 상호 작용하는 경우 교착 상태가 발생할 수 있습니다. 클래스의 AutoResetEvent 동작과 대조합니다. 메서드 Set 를 호출하여 신호를 AutoResetEvent 보내거나 대기 중인 AutoResetEvent 스레드가 없는 경우 스레드가 호출WaitOneWaitAnyWaitAll될 때까지 신호 상태가 유지됩니다. AutoResetEvent 스레드를 해제하고 서명되지 않은 상태로 돌아갑니다.

동기화된 개체에는 현재 잠금을 보유하고 있는 스레드에 대한 참조, 잠금을 가져올 준비가 된 스레드가 포함된 준비 큐에 대한 참조, 개체 상태 변경 알림을 기다리는 스레드가 포함된 대기 큐에 대한 참조 등 여러 참조가 있습니다.

Pulse, PulseAll, Wait 메서드는 동기화된 블록 내에서 호출되어야 합니다.

여러 스레드에 신호를 표시하려면 이 메서드를 PulseAll 사용합니다.

적용 대상

추가 정보