Monitor.Wait 메서드

정의

개체의 잠금을 해제한 다음 잠금을 다시 가져올 때까지 현재 스레드를 차단합니다.Releases the lock on an object and blocks the current thread until it reacquires the lock.

오버로드

Wait(Object, Int32, Boolean)

개체의 잠금을 해제한 다음 잠금을 다시 가져올 때까지 현재 스레드를 차단합니다.Releases the lock on an object and blocks the current thread until it reacquires the lock. 지정된 시간 제한 간격이 지나면 스레드가 준비된 큐에 들어갑니다.If the specified time-out interval elapses, the thread enters the ready queue. 또한 이 메서드는 컨텍스트의 동기화 도메인(동기화된 컨텍스트에 있는 경우)을 대기 전에 종료하고 나중에 다시 가져오는지 여부도 지정합니다.This method also specifies whether the synchronization domain for the context (if in a synchronized context) is exited before the wait and reacquired afterward.

Wait(Object)

개체의 잠금을 해제한 다음 잠금을 다시 가져올 때까지 현재 스레드를 차단합니다.Releases the lock on an object and blocks the current thread until it reacquires the lock.

Wait(Object, Int32)

개체의 잠금을 해제한 다음 잠금을 다시 가져올 때까지 현재 스레드를 차단합니다.Releases the lock on an object and blocks the current thread until it reacquires the lock. 지정된 시간 제한 간격이 지나면 스레드가 준비된 큐에 들어갑니다.If the specified time-out interval elapses, the thread enters the ready queue.

Wait(Object, TimeSpan)

개체의 잠금을 해제한 다음 잠금을 다시 가져올 때까지 현재 스레드를 차단합니다.Releases the lock on an object and blocks the current thread until it reacquires the lock. 지정된 시간 제한 간격이 지나면 스레드가 준비된 큐에 들어갑니다.If the specified time-out interval elapses, the thread enters the ready queue.

Wait(Object, TimeSpan, Boolean)

개체의 잠금을 해제한 다음 잠금을 다시 가져올 때까지 현재 스레드를 차단합니다.Releases the lock on an object and blocks the current thread until it reacquires the lock. 지정된 시간 제한 간격이 지나면 스레드가 준비된 큐에 들어갑니다.If the specified time-out interval elapses, the thread enters the ready queue. 필요에 따라 동기화된 컨텍스트의 동기화 도메인을 대기 전에 종료하고 나중에 해당 도메인을 다시 가져옵니다.Optionally exits the synchronization domain for the synchronized context before the wait and reacquires the domain afterward.

Wait(Object, Int32, Boolean)

개체의 잠금을 해제한 다음 잠금을 다시 가져올 때까지 현재 스레드를 차단합니다.Releases the lock on an object and blocks the current thread until it reacquires the lock. 지정된 시간 제한 간격이 지나면 스레드가 준비된 큐에 들어갑니다.If the specified time-out interval elapses, the thread enters the ready queue. 또한 이 메서드는 컨텍스트의 동기화 도메인(동기화된 컨텍스트에 있는 경우)을 대기 전에 종료하고 나중에 다시 가져오는지 여부도 지정합니다.This method also specifies whether the synchronization domain for the context (if in a synchronized context) is exited before the wait and reacquired afterward.

public:
 static bool Wait(System::Object ^ obj, int millisecondsTimeout, bool exitContext);
public static bool Wait (object obj, int millisecondsTimeout, bool exitContext);
static member Wait : obj * int * bool -> bool
Public Shared Function Wait (obj As Object, millisecondsTimeout As Integer, exitContext As Boolean) As Boolean

매개 변수

obj
Object

대기할 개체입니다.The object on which to wait.

millisecondsTimeout
Int32

스레드가 준비된 큐에 들어가기 전에 대기할 시간(밀리초)입니다.The number of milliseconds to wait before the thread enters the ready queue.

exitContext
Boolean

대기 전에 컨텍스트의 동기화 도메인(동기화된 컨텍스트에 있는 경우)을 끝내고 다시 가져오면 true이고, 그렇지 않으면 false입니다.true to exit and reacquire the synchronization domain for the context (if in a synchronized context) before the wait; otherwise, false.

반환

Boolean

지정된 시간이 경과하기 전에 잠금을 다시 가져오면 true이고, 지정된 시간이 경과한 후에 잠금을 다시 가져오면 false입니다.true if the lock was reacquired before the specified time elapsed; false if the lock was reacquired after the specified time elapsed. 이 메서드는 잠금을 다시 가져올 때까지 반환하지 않습니다.The method does not return until the lock is reacquired.

예외

obj 매개 변수가 null인 경우The obj parameter is null.

Wait가 동기화된 코드 블록 내에서 호출되지 않는 경우Wait is not invoked from within a synchronized block of code.

Wait를 호출하는 스레드가 나중에 대기 상태에서 중단된 경우.The thread that invokes Wait is later interrupted from the waiting state. 이 예외는 다른 스레드가 이 스레드의 Interrupt() 메서드를 호출할 때 발생합니다.This happens when another thread calls this thread's Interrupt() method.

millisecondsTimeout 매개 변수의 값이 음이고 Infinite와 같지 않은 경우The value of the millisecondsTimeout parameter is negative, and is not equal to Infinite.

설명

이 메서드는 매개 변수에 대 한 배타적 잠금을 다시 가져옵니다 때까지 반환 되지 않습니다 obj .This method does not return until it reacquires an exclusive lock on the obj parameter.

현재 지정 된 개체에 대 한 잠금을 소유 하 고 있는 스레드는 다른 스레드가이 개체에 액세스할 수 있도록 개체를 해제 하기 위해이 메서드를 호출 합니다.The thread that currently owns the lock on the specified object invokes this method in order to release the object so that another thread can access it. 잠금을 다시 획득 하려고 대기 하는 동안 호출자가 차단 됩니다.The caller is blocked while waiting to reacquire the lock. 이 메서드는 호출자가 다른 스레드의 작업 결과로 발생 하는 상태 변경을 기다려야 할 때 호출 됩니다.This method is called when the caller needs to wait for a state change that will occur as a result of another thread's operations.

제한 시간을 사용 하면 다른 스레드가 또는 메서드를 먼저 호출 하지 않고 잠금을 해제 하는 경우 현재 스레드가 무기한 차단 되지 않습니다 Pulse PulseAll .The time-out ensures that the current thread does not block indefinitely if another thread releases the lock without first calling the Pulse or PulseAll method. 또한 스레드를 준비 큐로 이동 하 여 대기 큐에 있는 다른 스레드를 무시 하 고 잠금을 보다 빨리 다시 가져올 수 있습니다.It also moves the thread to the ready queue, bypassing other threads ahead of it in the wait queue, so that it can reacquire the lock sooner. 스레드는 메서드의 반환 값을 테스트 하 여 Wait 제한 시간이 초과 되기 전에 잠금을 경과한 여부를 확인할 수 있습니다. 스레드는 대기를 시작 하는 조건을 평가할 수 있으며, 필요한 경우 Wait 메서드를 다시 호출 합니다.The thread can test the return value of the Wait method to determine whether it reacquired the lock prior to the time-out. The thread can evaluate the conditions that caused it to enter the wait, and if necessary call the Wait method again.

스레드가를 호출 하면 Wait 잠금이 해제 되 고 대기 중인 큐에 들어갑니다.When a thread calls Wait, it releases the lock and enters the waiting queue. 이 시점에서 준비 된 큐 (있는 경우)의 다음 스레드가 잠금을 제어할 수 있습니다.At this point, the next thread in the ready queue (if there is one) is allowed to take control of the lock. 호출 된 스레드는 Wait 잠금을 보유 하는 스레드가 호출 될 때까지 대기 중인 큐에 남아 PulseAll 있거나, 큐에서 다음이 고 잠금를 보유 하는 스레드가 호출 될 때까지 대기 큐에 남아 Pulse 있습니다.The thread that invoked Wait remains in the waiting queue until either a thread that holds the lock invokes PulseAll, or it is the next in the queue and a thread that holds the lock invokes Pulse. 그러나 millisecondsTimeout 다른 스레드가이 개체의 또는 메서드를 호출 하기 전에 경과 하는 경우 Pulse 잠금을 다시 PulseAll 얻으려면 원래 스레드가 준비 된 큐로 이동 합니다.However, if millisecondsTimeout elapses before another thread invokes this object's Pulse or PulseAll method, the original thread is moved to the ready queue in order to regain the lock.

참고

Infinite매개 변수에를 지정 하는 경우 millisecondsTimeout 이 메서드는 잠금 소유자가 또는를 호출 하지 않는 한 무기한 차단 합니다 Pulse PulseAll .If Infinite is specified for the millisecondsTimeout parameter, this method blocks indefinitely unless the holder of the lock calls Pulse or PulseAll. millisecondsTimeout가 0 인 경우를 호출 하는 스레드는 Wait 잠금을 해제 한 다음 즉시 준비 된 큐에 입력 하 여 잠금을 다시 시도 합니다.If millisecondsTimeout equals 0, the thread that calls Wait releases the lock and then immediately enters the ready queue in order to regain the lock.

호출자는 Wait Enter 지정 된 개체에 대해 호출 된 횟수에 관계 없이 한 번 실행 됩니다.The caller executes Wait once, regardless of the number of times Enter has been invoked for the specified object. 개념적으로 Wait 메서드는 호출자가 개체에 대해 호출 된 횟수를 저장 하 EnterExit 잠긴 개체를 완전히 해제 하는 데 필요한 횟수 만큼 호출 합니다.Conceptually, the Wait method stores the number of times the caller invoked Enter on the object and invokes Exit as many times as necessary to fully release the locked object. 그런 다음 호출자는 개체를 다시 가져오는 동안 대기 하는 동안 차단 됩니다.The caller then blocks while waiting to reacquire the object. 호출자가 잠금을 다시 가져옵니다 하면 시스템은 Enter 호출자에 대해 저장 된 수를 복원 하는 데 필요한 횟수 만큼 호출 Enter 합니다.When the caller reacquires the lock, the system calls Enter as many times as necessary to restore the saved Enter count for the caller. 를 호출 하면 Wait 지정 된 개체에 대해서만 잠금이 해제 됩니다. 호출자가 다른 개체에 대 한 잠금 소유자 인 경우에는 이러한 잠금이 해제 되지 않습니다.Calling Wait releases the lock for the specified object only; if the caller is the owner of locks on other objects, these locks are not released.

참고

동기화 된 개체는 현재 잠금을 보유 하는 스레드에 대 한 참조, 잠금을 가져올 준비가 된 스레드를 포함 하는 준비 된 큐에 대 한 참조 및 개체의 상태 변경을 알리기 위해 대기 중인 스레드를 포함 하는 대기 큐에 대 한 참조를 포함 하 여 여러 참조를 포함 합니다.A synchronized object holds several references, including a reference to the thread that currently holds the lock, a reference to the ready queue, which contains the threads that are ready to obtain the lock, and a reference to the waiting queue, which contains the threads that are waiting for notification of a change in the object's state.

Pulse, PulseAll 및 메서드는 Wait 동기화 된 코드 블록 내에서 호출 해야 합니다.The Pulse, PulseAll, and Wait methods must be invoked from within a synchronized block of code.

이 메서드에 대 한 설명에서는 Pulse Pulse 대기 중인 스레드가 없을 때가 호출 되 면 어떻게 되는지 설명 합니다.The remarks for the Pulse method explain what happens if Pulse is called when no threads are waiting.

컨텍스트 종료에 대 한 참고 사항Notes on Exiting the Context

exitContext매개 변수는 Wait 기본값이 아닌 관리 되는 컨텍스트 내에서 메서드를 호출 하지 않는 한 효과가 없습니다.TheexitContext parameter has no effect unless the Wait method is called from inside a nondefault managed context. 스레드가에서 파생 된 클래스의 인스턴스에 대 한 호출 내에 있는 경우이 문제가 발생할 수 있습니다 ContextBoundObject .This can happen if your thread is inside a call to an instance of a class derived from ContextBoundObject. 파생 되지 않은 클래스에 메서드를 현재 실행 중인 경우에 ContextBoundObject같은 String, 기본이 아닌 컨텍스트에서 할 경우를 ContextBoundObject 가 현재 애플리케이션 도메인에서 스택에 합니다.Even if you are currently executing a method on a class that is not derived from ContextBoundObject, like String, you can be in a nondefault context if a ContextBoundObject is on your stack in the current application domain.

코드를 기본이 아닌 컨텍스트에서 실행 하는 경우에는를 지정 하 여 true exitContext 메서드를 실행 하기 전에 스레드가 기본이 아닌 관리 되는 컨텍스트 (기본 컨텍스트로 전환)를 종료 하도록 합니다 Wait .When your code is executing in a nondefault context, specifying true for exitContext causes the thread to exit the nondefault managed context (that is, to transition to the default context) before executing the Wait method. 메서드 호출이 완료 된 후 기본값이 아닌 원래 컨텍스트로 돌아갑니다 Wait .It returns to the original nondefault context after the call to the Wait method completes.

이는 컨텍스트 바인딩된 클래스에 특성이 적용 된 경우에 유용할 수 있습니다 SynchronizationAttribute .This can be useful when the context-bound class has the SynchronizationAttribute attribute applied. 이 경우 클래스의 멤버에 대 한 모든 호출이 자동으로 동기화 되 고 동기화 도메인은 클래스에 대 한 전체 코드 본문입니다.In that case, all calls to members of the class are automatically synchronized, and the synchronization domain is the entire body of code for the class. 멤버의 호출 스택에 있는 코드가 메서드를 호출 Wait 하 고에 대해를 지정 하 true 는 경우 exitContext 스레드는 동기화 도메인을 종료 하 여 개체의 모든 멤버에 대 한 호출에서 차단 된 스레드를 계속 진행 하도록 허용 합니다.If code in the call stack of a member calls the Wait method and specifies true for exitContext, the thread exits the synchronization domain, allowing a thread that is blocked on a call to any member of the object to proceed. Wait메서드가 반환 될 때 호출을 수행한 스레드는 동기화 도메인을 다시 입력 하기 위해 대기 해야 합니다.When the Wait method returns, the thread that made the call must wait to reenter the synchronization domain.

추가 정보

적용 대상

Wait(Object)

개체의 잠금을 해제한 다음 잠금을 다시 가져올 때까지 현재 스레드를 차단합니다.Releases the lock on an object and blocks the current thread until it reacquires the lock.

public:
 static bool Wait(System::Object ^ obj);
public static bool Wait (object obj);
static member Wait : obj -> bool
Public Shared Function Wait (obj As Object) As Boolean

매개 변수

obj
Object

대기할 개체입니다.The object on which to wait.

반환

Boolean

지정된 개체 잠금을 호출자가 다시 가져와 호출이 반환되면 true입니다.true if the call returned because the caller reacquired the lock for the specified object. 잠금을 다시 가져오지 않으면 이 메서드는 반환하지 않습니다.This method does not return if the lock is not reacquired.

예외

obj 매개 변수가 null인 경우The obj parameter is null.

호출한 스레드가 지정된 개체 잠금을 소유하지 않는 경우The calling thread does not own the lock for the specified object.

Wait를 호출하는 스레드가 나중에 대기 상태에서 중단된 경우.The thread that invokes Wait is later interrupted from the waiting state. 이 예외는 다른 스레드가 이 스레드의 Interrupt() 메서드를 호출할 때 발생합니다.This happens when another thread calls this thread's Interrupt() method.

설명

현재 지정 된 개체에 대 한 잠금을 소유 하 고 있는 스레드는 다른 스레드가이 개체에 액세스할 수 있도록 개체를 해제 하기 위해이 메서드를 호출 합니다.The thread that currently owns the lock on the specified object invokes this method in order to release the object so that another thread can access it. 잠금을 다시 획득 하려고 대기 하는 동안 호출자가 차단 됩니다.The caller is blocked while waiting to reacquire the lock. 이 메서드는 호출자가 다른 스레드의 작업 결과로 발생 하는 상태 변경을 기다려야 할 때 호출 됩니다.This method is called when the caller needs to wait for a state change that will occur as a result of another thread's operations.

스레드는를 호출할 때 Wait 개체에 대 한 잠금을 해제 하 고 개체의 대기 중인 큐에 들어갑니다.When a thread calls Wait, it releases the lock on the object and enters the object's waiting queue. 개체의 준비 된 큐에 있는 다음 스레드 (있는 경우)는 잠금을 획득 하 고 개체를 단독으로 사용 합니다.The next thread in the object's ready queue (if there is one) acquires the lock and has exclusive use of the object. 을 호출 하는 모든 스레드는 Wait 또는에서 신호를 받을 때까지 대기 중인 큐에 남아 있으며 Pulse PulseAll 잠금 소유자가 보냅니다.All threads that call Wait remain in the waiting queue until they receive a signal from Pulse or PulseAll, sent by the owner of the lock. Pulse를 보내면 대기 중인 큐의 헤드에 있는 스레드만 영향을 받습니다.If Pulse is sent, only the thread at the head of the waiting queue is affected. PulseAll가 전송 되 면 개체를 대기 중인 모든 스레드가 영향을 받습니다.If PulseAll is sent, all threads that are waiting for the object are affected. 신호가 수신 되 면 하나 이상의 스레드가 대기 중인 큐를 그대로 두고 준비 된 큐를 입력 합니다.When the signal is received, one or more threads leave the waiting queue and enter the ready queue. 준비 된 큐의 스레드가 잠금을 다시 가져올 수 있습니다.A thread in the ready queue is permitted to reacquire the lock.

이 메서드는 호출 스레드가 개체에 대 한 잠금을 다시 가져옵니다 때 반환 됩니다.This method returns when the calling thread reacquires the lock on the object. 잠금 소유자가 또는를 호출 하지 않는 경우이 메서드는 무기한 차단 됩니다 Pulse PulseAll .Note that this method blocks indefinitely if the holder of the lock does not call Pulse or PulseAll.

호출자는 Wait Enter 지정 된 개체에 대해 호출 된 횟수에 관계 없이 한 번 실행 됩니다.The caller executes Wait once, regardless of the number of times Enter has been invoked for the specified object. 개념적으로 Wait 메서드는 호출자가 개체에 대해 호출 된 횟수를 저장 하 EnterExit 잠긴 개체를 완전히 해제 하는 데 필요한 횟수 만큼 호출 합니다.Conceptually, the Wait method stores the number of times the caller invoked Enter on the object and invokes Exit as many times as necessary to fully release the locked object. 그런 다음 호출자는 개체를 다시 가져오는 동안 대기 하는 동안 차단 됩니다.The caller then blocks while waiting to reacquire the object. 호출자가 잠금을 다시 가져옵니다 하면 시스템은 Enter 호출자에 대해 저장 된 수를 복원 하는 데 필요한 횟수 만큼 호출 Enter 합니다.When the caller reacquires the lock, the system calls Enter as many times as necessary to restore the saved Enter count for the caller. 를 호출 하면 Wait 지정 된 개체에 대해서만 잠금이 해제 됩니다. 호출자가 다른 개체에 대 한 잠금 소유자 인 경우에는 이러한 잠금이 해제 되지 않습니다.Calling Wait releases the lock for the specified object only; if the caller is the owner of locks on other objects, these locks are not released.

동기화 된 개체는 현재 잠금을 보유 하는 스레드에 대 한 참조, 잠금을 가져올 준비가 된 스레드를 포함 하는 준비 된 큐에 대 한 참조 및 개체 상태의 변경 알림을 기다리는 스레드를 포함 하는 대기 큐에 대 한 참조를 포함 하 여 여러 참조를 보유 합니다.Note that a synchronized object holds several references, including a reference to the thread that currently holds the lock, a reference to the ready queue, which contains the threads that are ready to obtain the lock, and a reference to the waiting queue, which contains the threads that are waiting for notification of a change in the object's state.

Pulse, PulseAll 및 메서드는 Wait 동기화 된 코드 블록 내에서 호출 해야 합니다.The Pulse, PulseAll, and Wait methods must be invoked from within a synchronized block of code.

이 메서드에 대 한 설명에서는 Pulse Pulse 대기 중인 스레드가 없을 때가 호출 되 면 어떻게 되는지 설명 합니다.The remarks for the Pulse method explain what happens if Pulse is called when no threads are waiting.

추가 정보

적용 대상

Wait(Object, Int32)

개체의 잠금을 해제한 다음 잠금을 다시 가져올 때까지 현재 스레드를 차단합니다.Releases the lock on an object and blocks the current thread until it reacquires the lock. 지정된 시간 제한 간격이 지나면 스레드가 준비된 큐에 들어갑니다.If the specified time-out interval elapses, the thread enters the ready queue.

public:
 static bool Wait(System::Object ^ obj, int millisecondsTimeout);
public static bool Wait (object obj, int millisecondsTimeout);
static member Wait : obj * int -> bool
Public Shared Function Wait (obj As Object, millisecondsTimeout As Integer) As Boolean

매개 변수

obj
Object

대기할 개체입니다.The object on which to wait.

millisecondsTimeout
Int32

스레드가 준비된 큐에 들어가기 전에 대기할 시간(밀리초)입니다.The number of milliseconds to wait before the thread enters the ready queue.

반환

Boolean

지정된 시간이 경과하기 전에 잠금을 다시 가져오면 true이고, 지정된 시간이 경과한 후에 잠금을 다시 가져오면 false입니다.true if the lock was reacquired before the specified time elapsed; false if the lock was reacquired after the specified time elapsed. 이 메서드는 잠금을 다시 가져올 때까지 반환하지 않습니다.The method does not return until the lock is reacquired.

예외

obj 매개 변수가 null인 경우The obj parameter is null.

호출한 스레드가 지정된 개체 잠금을 소유하지 않는 경우The calling thread does not own the lock for the specified object.

Wait를 호출하는 스레드가 나중에 대기 상태에서 중단된 경우.The thread that invokes Wait is later interrupted from the waiting state. 이 예외는 다른 스레드가 이 스레드의 Interrupt() 메서드를 호출할 때 발생합니다.This happens when another thread calls this thread's Interrupt() method.

millisecondsTimeout 매개 변수의 값이 음이고 Infinite와 같지 않은 경우The value of the millisecondsTimeout parameter is negative, and is not equal to Infinite.

설명

이 메서드는 매개 변수에 대 한 배타적 잠금을 다시 가져옵니다 때까지 반환 되지 않습니다 obj .This method does not return until it reacquires an exclusive lock on the obj parameter.

현재 지정 된 개체에 대 한 잠금을 소유 하 고 있는 스레드는 다른 스레드가이 개체에 액세스할 수 있도록 개체를 해제 하기 위해이 메서드를 호출 합니다.The thread that currently owns the lock on the specified object invokes this method in order to release the object so that another thread can access it. 잠금을 다시 획득 하려고 대기 하는 동안 호출자가 차단 됩니다.The caller is blocked while waiting to reacquire the lock. 이 메서드는 호출자가 다른 스레드의 작업 결과로 발생 하는 상태 변경을 기다려야 할 때 호출 됩니다.This method is called when the caller needs to wait for a state change that will occur as a result of another thread's operations.

제한 시간을 사용 하면 다른 스레드가 또는 메서드를 먼저 호출 하지 않고 잠금을 해제 하는 경우 현재 스레드가 무기한 차단 되지 않습니다 Pulse PulseAll .The time-out ensures that the current thread does not block indefinitely if another thread releases the lock without first calling the Pulse or PulseAll method. 또한 스레드를 준비 큐로 이동 하 여 대기 큐에 있는 다른 스레드를 무시 하 고 잠금을 보다 빨리 다시 가져올 수 있습니다.It also moves the thread to the ready queue, bypassing other threads ahead of it in the wait queue, so that it can reacquire the lock sooner. 스레드는 메서드의 반환 값을 테스트 하 여 Wait 제한 시간이 초과 되기 전에 잠금을 경과한 여부를 확인할 수 있습니다. 스레드는 대기를 시작 하는 조건을 평가할 수 있으며, 필요한 경우 Wait 메서드를 다시 호출 합니다.The thread can test the return value of the Wait method to determine whether it reacquired the lock prior to the time-out. The thread can evaluate the conditions that caused it to enter the wait, and if necessary call the Wait method again.

스레드는를 호출할 때 Wait 개체에 대 한 잠금을 해제 하 고 개체의 대기 중인 큐에 들어갑니다.When a thread calls Wait, it releases the lock on the object and enters the object's waiting queue. 개체의 준비 된 큐에 있는 다음 스레드 (있는 경우)는 잠금을 획득 하 고 개체를 단독으로 사용 합니다.The next thread in the object's ready queue (if there is one) acquires the lock and has exclusive use of the object. 호출 된 스레드는 Wait 잠금을 보유 하는 스레드가 호출 될 때까지 대기 중인 큐에 남아 PulseAll 있거나, 큐에서 다음이 고 잠금를 보유 하는 스레드가 호출 될 때까지 대기 큐에 남아 Pulse 있습니다.The thread that invoked Wait remains in the waiting queue until either a thread that holds the lock invokes PulseAll, or it is the next in the queue and a thread that holds the lock invokes Pulse. 그러나 millisecondsTimeout 다른 스레드가이 개체의 또는 메서드를 호출 하기 전에 경과 하는 경우 Pulse 잠금을 다시 PulseAll 얻으려면 원래 스레드가 준비 된 큐로 이동 합니다.However, if millisecondsTimeout elapses before another thread invokes this object's Pulse or PulseAll method, the original thread is moved to the ready queue in order to regain the lock.

참고

Infinite매개 변수에를 지정 하는 경우 millisecondsTimeout 이 메서드는 잠금 소유자가 또는를 호출 하지 않는 한 무기한 차단 합니다 Pulse PulseAll .If Infinite is specified for the millisecondsTimeout parameter, this method blocks indefinitely unless the holder of the lock calls Pulse or PulseAll. millisecondsTimeout가 0 인 경우를 호출 하는 스레드는 Wait 잠금을 해제 한 다음 즉시 준비 된 큐에 입력 하 여 잠금을 다시 시도 합니다.If millisecondsTimeout equals 0, the thread that calls Wait releases the lock and then immediately enters the ready queue in order to regain the lock.

호출자는 Wait Enter 지정 된 개체에 대해 호출 된 횟수에 관계 없이 한 번 실행 됩니다.The caller executes Wait once, regardless of the number of times Enter has been invoked for the specified object. 개념적으로 Wait 메서드는 호출자가 개체에 대해 호출 된 횟수를 저장 하 EnterExit 잠긴 개체를 완전히 해제 하는 데 필요한 횟수 만큼 호출 합니다.Conceptually, the Wait method stores the number of times the caller invoked Enter on the object and invokes Exit as many times as necessary to fully release the locked object. 그런 다음 호출자는 개체를 다시 가져오는 동안 대기 하는 동안 차단 됩니다.The caller then blocks while waiting to reacquire the object. 호출자가 잠금을 다시 가져옵니다 하면 시스템은 Enter 호출자에 대해 저장 된 수를 복원 하는 데 필요한 횟수 만큼 호출 Enter 합니다.When the caller reacquires the lock, the system calls Enter as many times as necessary to restore the saved Enter count for the caller. 를 호출 하면 Wait 지정 된 개체에 대해서만 잠금이 해제 됩니다. 호출자가 다른 개체에 대 한 잠금 소유자 인 경우에는 이러한 잠금이 해제 되지 않습니다.Calling Wait releases the lock for the specified object only; if the caller is the owner of locks on other objects, these locks are not released.

참고

동기화 된 개체는 현재 잠금을 보유 하는 스레드에 대 한 참조, 잠금을 가져올 준비가 된 스레드를 포함 하는 준비 된 큐에 대 한 참조 및 개체의 상태 변경을 알리기 위해 대기 중인 스레드를 포함 하는 대기 큐에 대 한 참조를 포함 하 여 여러 참조를 포함 합니다.A synchronized object holds several references, including a reference to the thread that currently holds the lock, a reference to the ready queue, which contains the threads that are ready to obtain the lock, and a reference to the waiting queue, which contains the threads that are waiting for notification of a change in the object's state.

Pulse, PulseAll 및 메서드는 Wait 동기화 된 코드 블록 내에서 호출 해야 합니다.The Pulse, PulseAll, and Wait methods must be invoked from within a synchronized block of code.

이 메서드에 대 한 설명에서는 Pulse Pulse 대기 중인 스레드가 없을 때가 호출 되 면 어떻게 되는지 설명 합니다.The remarks for the Pulse method explain what happens if Pulse is called when no threads are waiting.

추가 정보

적용 대상

Wait(Object, TimeSpan)

개체의 잠금을 해제한 다음 잠금을 다시 가져올 때까지 현재 스레드를 차단합니다.Releases the lock on an object and blocks the current thread until it reacquires the lock. 지정된 시간 제한 간격이 지나면 스레드가 준비된 큐에 들어갑니다.If the specified time-out interval elapses, the thread enters the ready queue.

public:
 static bool Wait(System::Object ^ obj, TimeSpan timeout);
public static bool Wait (object obj, TimeSpan timeout);
static member Wait : obj * TimeSpan -> bool
Public Shared Function Wait (obj As Object, timeout As TimeSpan) As Boolean

매개 변수

obj
Object

대기할 개체입니다.The object on which to wait.

timeout
TimeSpan

스레드가 준비된 큐에 들어가기 전에 대기할 시간을 나타내는 TimeSpan입니다.A TimeSpan representing the amount of time to wait before the thread enters the ready queue.

반환

Boolean

지정된 시간이 경과하기 전에 잠금을 다시 가져오면 true이고, 지정된 시간이 경과한 후에 잠금을 다시 가져오면 false입니다.true if the lock was reacquired before the specified time elapsed; false if the lock was reacquired after the specified time elapsed. 이 메서드는 잠금을 다시 가져올 때까지 반환하지 않습니다.The method does not return until the lock is reacquired.

예외

obj 매개 변수가 null인 경우The obj parameter is null.

호출한 스레드가 지정된 개체 잠금을 소유하지 않는 경우The calling thread does not own the lock for the specified object.

Wait를 호출하는 스레드가 나중에 대기 상태에서 중단된 경우.The thread that invokes Wait is later interrupted from the waiting state. 이 예외는 다른 스레드가 이 스레드의 Interrupt() 메서드를 호출할 때 발생합니다.This happens when another thread calls this thread's Interrupt() method.

timeout 매개 변수의 값(밀리초)이 음수이고 Infinite(-1밀리초)를 나타내지 않거나 MaxValue보다 큰 경우The value of the timeout parameter in milliseconds is negative and does not represent Infinite (-1 millisecond), or is greater than MaxValue.

설명

이 메서드는 매개 변수에 대 한 배타적 잠금을 다시 가져옵니다 때까지 반환 되지 않습니다 obj .This method does not return until it reacquires an exclusive lock on the obj parameter.

현재 지정 된 개체에 대 한 잠금을 소유 하 고 있는 스레드는 다른 스레드가이 개체에 액세스할 수 있도록 개체를 해제 하기 위해이 메서드를 호출 합니다.The thread that currently owns the lock on the specified object invokes this method in order to release the object so that another thread can access it. 잠금을 다시 획득 하려고 대기 하는 동안 호출자가 차단 됩니다.The caller is blocked while waiting to reacquire the lock. 이 메서드는 호출자가 다른 스레드의 작업 결과로 발생 하는 상태 변경을 기다려야 할 때 호출 됩니다.This method is called when the caller needs to wait for a state change that will occur as a result of another thread's operations.

제한 시간을 사용 하면 다른 스레드가 또는 메서드를 먼저 호출 하지 않고 잠금을 해제 하는 경우 현재 스레드가 무기한 차단 되지 않습니다 Pulse PulseAll .The time-out ensures that the current thread does not block indefinitely if another thread releases the lock without first calling the Pulse or PulseAll method. 또한 스레드를 준비 큐로 이동 하 여 대기 큐에 있는 다른 스레드를 무시 하 고 잠금을 보다 빨리 다시 가져올 수 있습니다.It also moves the thread to the ready queue, bypassing other threads ahead of it in the wait queue, so that it can reacquire the lock sooner. 스레드는 메서드의 반환 값을 테스트 하 여 Wait 제한 시간이 초과 되기 전에 잠금을 경과한 여부를 확인할 수 있습니다. 스레드는 대기를 시작 하는 조건을 평가할 수 있으며, 필요한 경우 Wait 메서드를 다시 호출 합니다.The thread can test the return value of the Wait method to determine whether it reacquired the lock prior to the time-out. The thread can evaluate the conditions that caused it to enter the wait, and if necessary call the Wait method again.

스레드는를 호출할 때 Wait 개체에 대 한 잠금을 해제 하 고 개체의 대기 중인 큐에 들어갑니다.When a thread calls Wait, it releases the lock on the object and enters the object's waiting queue. 개체의 준비 된 큐에 있는 다음 스레드 (있는 경우)는 잠금을 획득 하 고 개체를 단독으로 사용 합니다.The next thread in the object's ready queue (if there is one) acquires the lock and has exclusive use of the object. 호출 된 스레드는 Wait 잠금을 보유 하는 스레드가 호출 될 때까지 대기 중인 큐에 남아 PulseAll 있거나, 큐에서 다음이 고 잠금를 보유 하는 스레드가 호출 될 때까지 대기 큐에 남아 Pulse 있습니다.The thread that invoked Wait remains in the waiting queue until either a thread that holds the lock invokes PulseAll, or it is the next in the queue and a thread that holds the lock invokes Pulse. 그러나 timeout 다른 스레드가이 개체의 또는 메서드를 호출 하기 전에 경과 하는 경우 Pulse 잠금을 다시 PulseAll 얻으려면 원래 스레드가 준비 된 큐로 이동 합니다.However, if timeout elapses before another thread invokes this object's Pulse or PulseAll method, the original thread is moved to the ready queue in order to regain the lock.

참고

TimeSpan매개 변수에 대 한-1 밀리초를 나타내는가 지정 된 경우 timeout 이 메서드는 잠금 소유자가 또는를 호출 하지 않는 한 무기한 차단 됩니다 Pulse PulseAll .If a TimeSpan representing -1 millisecond is specified for the timeout parameter, this method blocks indefinitely unless the holder of the lock calls Pulse or PulseAll. timeout가 0 밀리초 이면를 호출 하는 스레드가 Wait 잠금을 해제 한 다음 즉시 준비 된 큐에 입력 하 여 잠금을 다시 시도 합니다.If timeout is 0 milliseconds, the thread that calls Wait releases the lock and then immediately enters the ready queue in order to regain the lock.

호출자는 Wait Enter 지정 된 개체에 대해 호출 된 횟수에 관계 없이 한 번 실행 됩니다.The caller executes Wait once, regardless of the number of times Enter has been invoked for the specified object. 개념적으로 Wait 메서드는 호출자가 개체에 대해 호출 된 횟수를 저장 하 EnterExit 잠긴 개체를 완전히 해제 하는 데 필요한 횟수 만큼 호출 합니다.Conceptually, the Wait method stores the number of times the caller invoked Enter on the object and invokes Exit as many times as necessary to fully release the locked object. 그런 다음 호출자는 개체를 다시 가져오는 동안 대기 하는 동안 차단 됩니다.The caller then blocks while waiting to reacquire the object. 호출자가 잠금을 다시 가져옵니다 하면 시스템은 Enter 호출자에 대해 저장 된 수를 복원 하는 데 필요한 횟수 만큼 호출 Enter 합니다.When the caller reacquires the lock, the system calls Enter as many times as necessary to restore the saved Enter count for the caller. 를 호출 하면 Wait 지정 된 개체에 대해서만 잠금이 해제 됩니다. 호출자가 다른 개체에 대 한 잠금 소유자 인 경우에는 이러한 잠금이 해제 되지 않습니다.Calling Wait releases the lock for the specified object only; if the caller is the owner of locks on other objects, these locks are not released.

참고

동기화 된 개체는 현재 잠금을 보유 하는 스레드에 대 한 참조, 잠금을 가져올 준비가 된 스레드를 포함 하는 준비 된 큐에 대 한 참조 및 개체의 상태 변경을 알리기 위해 대기 중인 스레드를 포함 하는 대기 큐에 대 한 참조를 포함 하 여 여러 참조를 포함 합니다.A synchronized object holds several references, including a reference to the thread that currently holds the lock, a reference to the ready queue, which contains the threads that are ready to obtain the lock, and a reference to the waiting queue, which contains the threads that are waiting for notification of a change in the object's state.

Pulse, PulseAll 및 메서드는 Wait 동기화 된 코드 블록 내에서 호출 해야 합니다.The Pulse, PulseAll, and Wait methods must be invoked from within a synchronized block of code.

이 메서드에 대 한 설명에서는 Pulse Pulse 대기 중인 스레드가 없을 때가 호출 되 면 어떻게 되는지 설명 합니다.The remarks for the Pulse method explain what happens if Pulse is called when no threads are waiting.

추가 정보

적용 대상

Wait(Object, TimeSpan, Boolean)

개체의 잠금을 해제한 다음 잠금을 다시 가져올 때까지 현재 스레드를 차단합니다.Releases the lock on an object and blocks the current thread until it reacquires the lock. 지정된 시간 제한 간격이 지나면 스레드가 준비된 큐에 들어갑니다.If the specified time-out interval elapses, the thread enters the ready queue. 필요에 따라 동기화된 컨텍스트의 동기화 도메인을 대기 전에 종료하고 나중에 해당 도메인을 다시 가져옵니다.Optionally exits the synchronization domain for the synchronized context before the wait and reacquires the domain afterward.

public:
 static bool Wait(System::Object ^ obj, TimeSpan timeout, bool exitContext);
public static bool Wait (object obj, TimeSpan timeout, bool exitContext);
static member Wait : obj * TimeSpan * bool -> bool
Public Shared Function Wait (obj As Object, timeout As TimeSpan, exitContext As Boolean) As Boolean

매개 변수

obj
Object

대기할 개체입니다.The object on which to wait.

timeout
TimeSpan

스레드가 준비된 큐에 들어가기 전에 대기할 시간을 나타내는 TimeSpan입니다.A TimeSpan representing the amount of time to wait before the thread enters the ready queue.

exitContext
Boolean

대기 전에 컨텍스트의 동기화 도메인(동기화된 컨텍스트에 있는 경우)을 끝내고 다시 가져오면 true이고, 그렇지 않으면 false입니다.true to exit and reacquire the synchronization domain for the context (if in a synchronized context) before the wait; otherwise, false.

반환

Boolean

지정된 시간이 경과하기 전에 잠금을 다시 가져오면 true이고, 지정된 시간이 경과한 후에 잠금을 다시 가져오면 false입니다.true if the lock was reacquired before the specified time elapsed; false if the lock was reacquired after the specified time elapsed. 이 메서드는 잠금을 다시 가져올 때까지 반환하지 않습니다.The method does not return until the lock is reacquired.

예외

obj 매개 변수가 null인 경우The obj parameter is null.

Wait가 동기화된 코드 블록 내에서 호출되지 않는 경우Wait is not invoked from within a synchronized block of code.

Wait를 호출하는 스레드가 나중에 대기 상태에서 중단된 경우.The thread that invokes Wait is later interrupted from the waiting state. 이 예외는 다른 스레드가 이 스레드의 Interrupt() 메서드를 호출할 때 발생합니다.This happens when another thread calls this thread's Interrupt() method.

timeout 매개 변수가 음수이고 Infinite(-1밀리초)를 나타내지 않거나 MaxValue보다 큰 경우The timeout parameter is negative and does not represent Infinite (-1 millisecond), or is greater than MaxValue.

설명

이 메서드는 매개 변수에 대 한 배타적 잠금을 다시 가져옵니다 때까지 반환 되지 않습니다 obj .This method does not return until it reacquires an exclusive lock on the obj parameter.

현재 지정 된 개체에 대 한 잠금을 소유 하 고 있는 스레드는 다른 스레드가이 개체에 액세스할 수 있도록 개체를 해제 하기 위해이 메서드를 호출 합니다.The thread that currently owns the lock on the specified object invokes this method in order to release the object so that another thread can access it. 잠금을 다시 획득 하려고 대기 하는 동안 호출자가 차단 됩니다.The caller is blocked while waiting to reacquire the lock. 이 메서드는 호출자가 다른 스레드의 작업 결과로 발생 하는 상태 변경을 기다려야 할 때 호출 됩니다.This method is called when the caller needs to wait for a state change that will occur as a result of another thread's operations.

제한 시간을 사용 하면 다른 스레드가 또는 메서드를 먼저 호출 하지 않고 잠금을 해제 하는 경우 현재 스레드가 무기한 차단 되지 않습니다 Pulse PulseAll .The time-out ensures that the current thread does not block indefinitely if another thread releases the lock without first calling the Pulse or PulseAll method. 또한 스레드를 준비 큐로 이동 하 여 대기 큐에 있는 다른 스레드를 무시 하 고 잠금을 보다 빨리 다시 가져올 수 있습니다.It also moves the thread to the ready queue, bypassing other threads ahead of it in the wait queue, so that it can reacquire the lock sooner. 스레드는 메서드의 반환 값을 테스트 하 여 Wait 제한 시간이 초과 되기 전에 잠금을 경과한 여부를 확인할 수 있습니다. 스레드는 대기를 시작 하는 조건을 평가할 수 있으며, 필요한 경우 Wait 메서드를 다시 호출 합니다.The thread can test the return value of the Wait method to determine whether it reacquired the lock prior to the time-out. The thread can evaluate the conditions that caused it to enter the wait, and if necessary call the Wait method again.

스레드가를 호출 하면 Wait 잠금이 해제 되 고 대기 중인 큐에 들어갑니다.When a thread calls Wait, it releases the lock and enters the waiting queue. 이 시점에서 준비 된 큐 (있는 경우)의 다음 스레드가 잠금을 제어할 수 있습니다.At this point, the next thread in the ready queue (if there is one) is allowed to take control of the lock. 호출 된 스레드는 Wait 잠금을 보유 하는 스레드가 호출 될 때까지 대기 중인 큐에 남아 PulseAll 있거나, 큐에서 다음이 고 잠금를 보유 하는 스레드가 호출 될 때까지 대기 큐에 남아 Pulse 있습니다.The thread that invoked Wait remains in the waiting queue until either a thread that holds the lock invokes PulseAll, or it is the next in the queue and a thread that holds the lock invokes Pulse. 그러나 timeout 다른 스레드가이 개체의 또는 메서드를 호출 하기 전에 시간 (밀리초)이 경과 하면 Pulse PulseAll 원래 스레드가 준비 된 큐로 이동 하 여 잠금을 다시 얻게 됩니다.However, if timeout milliseconds elapse before another thread invokes this object's Pulse or PulseAll method, the original thread is moved to the ready queue in order to regain the lock.

참고

TimeSpan매개 변수에 대 한-1 밀리초를 나타내는가 지정 된 경우 timeout 이 메서드는 잠금 소유자가 또는를 호출 하지 않는 한 무기한 차단 됩니다 Pulse PulseAll .If a TimeSpan representing -1 millisecond is specified for the timeout parameter, this method blocks indefinitely unless the holder of the lock calls Pulse or PulseAll. timeout가 0 밀리초 이면를 호출 하는 스레드가 Wait 잠금을 해제 한 다음 즉시 준비 된 큐에 입력 하 여 잠금을 다시 시도 합니다.If timeout is 0 milliseconds, the thread that calls Wait releases the lock and then immediately enters the ready queue in order to regain the lock.

호출자는 Wait Enter 지정 된 개체에 대해 호출 된 횟수에 관계 없이 한 번 실행 됩니다.The caller executes Wait once, regardless of the number of times Enter has been invoked for the specified object. 개념적으로 Wait 메서드는 호출자가 개체에 대해 호출 된 횟수를 저장 하 EnterExit 잠긴 개체를 완전히 해제 하는 데 필요한 횟수 만큼 호출 합니다.Conceptually, the Wait method stores the number of times the caller invoked Enter on the object and invokes Exit as many times as necessary to fully release the locked object. 그런 다음 호출자는 개체를 다시 가져오는 동안 대기 하는 동안 차단 됩니다.The caller then blocks while waiting to reacquire the object. 호출자가 잠금을 다시 가져옵니다 하면 시스템은 Enter 호출자에 대해 저장 된 수를 복원 하는 데 필요한 횟수 만큼 호출 Enter 합니다.When the caller reacquires the lock, the system calls Enter as many times as necessary to restore the saved Enter count for the caller. 를 호출 하면 Wait 지정 된 개체에 대해서만 잠금이 해제 됩니다. 호출자가 다른 개체에 대 한 잠금 소유자 인 경우에는 이러한 잠금이 해제 되지 않습니다.Calling Wait releases the lock for the specified object only; if the caller is the owner of locks on other objects, these locks are not released.

참고

동기화 된 개체는 현재 잠금을 보유 하는 스레드에 대 한 참조, 잠금을 가져올 준비가 된 스레드를 포함 하는 준비 된 큐에 대 한 참조 및 개체의 상태 변경을 알리기 위해 대기 중인 스레드를 포함 하는 대기 큐에 대 한 참조를 포함 하 여 여러 참조를 포함 합니다.A synchronized object holds several references, including a reference to the thread that currently holds the lock, a reference to the ready queue, which contains the threads that are ready to obtain the lock, and a reference to the waiting queue, which contains the threads that are waiting for notification of a change in the object's state.

Pulse, PulseAll 및 메서드는 Wait 동기화 된 코드 블록 내에서 호출 해야 합니다.The Pulse, PulseAll, and Wait methods must be invoked from within a synchronized block of code.

이 메서드에 대 한 설명에서는 Pulse Pulse 대기 중인 스레드가 없을 때가 호출 되 면 어떻게 되는지 설명 합니다.The remarks for the Pulse method explain what happens if Pulse is called when no threads are waiting.

컨텍스트 종료에 대 한 참고 사항Notes on Exiting the Context

exitContext매개 변수는 Wait 기본값이 아닌 관리 되는 컨텍스트 내에서 메서드를 호출 하지 않는 한 효과가 없습니다.TheexitContext parameter has no effect unless the Wait method is called from inside a nondefault managed context. 스레드가에서 파생 된 클래스의 인스턴스에 대 한 호출 내에 있는 경우이 문제가 발생할 수 있습니다 ContextBoundObject .This can happen if your thread is inside a call to an instance of a class derived from ContextBoundObject. 파생 되지 않은 클래스에 메서드를 현재 실행 중인 경우에 ContextBoundObject같은 String, 기본이 아닌 컨텍스트에서 할 경우를 ContextBoundObject 가 현재 애플리케이션 도메인에서 스택에 합니다.Even if you are currently executing a method on a class that is not derived from ContextBoundObject, like String, you can be in a nondefault context if a ContextBoundObject is on your stack in the current application domain.

코드를 기본이 아닌 컨텍스트에서 실행 하는 경우에는를 지정 하 여 true exitContext 메서드를 실행 하기 전에 스레드가 기본이 아닌 관리 되는 컨텍스트 (기본 컨텍스트로 전환)를 종료 하도록 합니다 Wait .When your code is executing in a nondefault context, specifying true for exitContext causes the thread to exit the nondefault managed context (that is, to transition to the default context) before executing the Wait method. 메서드 호출이 완료 된 후 기본값이 아닌 원래 컨텍스트로 돌아갑니다 Wait .It returns to the original nondefault context after the call to the Wait method completes.

이는 컨텍스트 바인딩된 클래스에 특성이 적용 된 경우에 유용할 수 있습니다 SynchronizationAttribute .This can be useful when the context-bound class has the SynchronizationAttribute attribute applied. 이 경우 클래스의 멤버에 대 한 모든 호출이 자동으로 동기화 되 고 동기화 도메인은 클래스에 대 한 전체 코드 본문입니다.In that case, all calls to members of the class are automatically synchronized, and the synchronization domain is the entire body of code for the class. 멤버의 호출 스택에 있는 코드가 메서드를 호출 Wait 하 고에 대해를 지정 하 true 는 경우 exitContext 스레드는 동기화 도메인을 종료 하 여 개체의 모든 멤버에 대 한 호출에서 차단 된 스레드를 계속 진행 하도록 허용 합니다.If code in the call stack of a member calls the Wait method and specifies true for exitContext, the thread exits the synchronization domain, allowing a thread that is blocked on a call to any member of the object to proceed. Wait메서드가 반환 될 때 호출을 수행한 스레드는 동기화 도메인을 다시 입력 하기 위해 대기 해야 합니다.When the Wait method returns, the thread that made the call must wait to reenter the synchronization domain.

추가 정보

적용 대상