다음을 통해 공유


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

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

Pulse동기화된 코드 블록 내에서 메서드 PulseAllWait 를 호출해야 합니다.

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

적용 대상

추가 정보