내보내기(0) 인쇄
모두 확장
이 문서는 기계로 번역한 것입니다. 원본 텍스트를 보려면 포인터를 문서의 문장 위로 올리십시오. 추가 정보
번역
원본

Monitor 클래스

개체에 대한 액세스를 동기화하는 메커니즘을 제공합니다.

System.Object
  System.Threading.Monitor

네임스페이스:  System.Threading
어셈블리:  mscorlib(mscorlib.dll)

[ComVisibleAttribute(true)]
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
	ExternalThreading = true)]
public static class Monitor

Monitor 형식에서는 다음과 같은 멤버를 노출합니다.

  이름설명
Public 메서드정적 멤버XNA Framework에서 지원에서 지원 이식 가능한 클래스 라이브러리다음에서 지원: Windows 스토어 앱용 .NETEnter(Object)지정된 개체의 단독 잠금을 가져옵니다.
Public 메서드정적 멤버에서 지원 이식 가능한 클래스 라이브러리다음에서 지원: Windows 스토어 앱용 .NETEnter(Object, Boolean)지정된 개체의 단독 잠금을 가져오고 잠금 설정 여부를 나타내는 값을 자동으로 설정합니다.
Public 메서드정적 멤버XNA Framework에서 지원에서 지원 이식 가능한 클래스 라이브러리다음에서 지원: Windows 스토어 앱용 .NETExit지정된 개체의 단독 잠금을 해제합니다.
Public 메서드정적 멤버다음에서 지원: Windows 스토어 앱용 .NETIsEntered현재 스레드가 지정된 개체에 대한 잠금을 보유하는지 여부를 확인합니다.
Public 메서드정적 멤버에서 지원 이식 가능한 클래스 라이브러리다음에서 지원: Windows 스토어 앱용 .NETPulse대기 중인 큐에 포함된 스레드에 잠겨 있는 개체의 상태 변경을 알립니다.
Public 메서드정적 멤버에서 지원 이식 가능한 클래스 라이브러리다음에서 지원: Windows 스토어 앱용 .NETPulseAll대기 중인 모든 스레드에 개체 상태 변경을 알립니다.
Public 메서드정적 멤버XNA Framework에서 지원에서 지원 이식 가능한 클래스 라이브러리다음에서 지원: Windows 스토어 앱용 .NETTryEnter(Object)지정된 개체의 단독 잠금을 가져오려고 했습니다.
Public 메서드정적 멤버에서 지원 이식 가능한 클래스 라이브러리다음에서 지원: Windows 스토어 앱용 .NETTryEnter(Object, Boolean)지정된 개체의 단독 잠금을 가져오고 잠금 설정 여부를 나타내는 값을 자동으로 설정하려고 시도합니다.
Public 메서드정적 멤버에서 지원 이식 가능한 클래스 라이브러리다음에서 지원: Windows 스토어 앱용 .NETTryEnter(Object, Int32)지정된 시간(밀리초) 동안 지정된 개체의 단독 잠금을 가져오려고 했습니다.
Public 메서드정적 멤버에서 지원 이식 가능한 클래스 라이브러리다음에서 지원: Windows 스토어 앱용 .NETTryEnter(Object, TimeSpan)지정된 시간 동안 지정된 개체의 단독 잠금을 가져오려고 했습니다.
Public 메서드정적 멤버에서 지원 이식 가능한 클래스 라이브러리다음에서 지원: Windows 스토어 앱용 .NETTryEnter(Object, Int32, Boolean)지정된 시간(밀리초) 동안 지정된 개체의 단독 잠금을 가져오고 잠금 설정 여부를 나타내는 값을 자동으로 설정하려고 시도합니다.
Public 메서드정적 멤버에서 지원 이식 가능한 클래스 라이브러리다음에서 지원: Windows 스토어 앱용 .NETTryEnter(Object, TimeSpan, Boolean)지정된 시간 동안 지정된 개체의 단독 잠금을 가져오고 잠금 설정 여부를 나타내는 값을 자동으로 설정하려고 시도합니다.
Public 메서드정적 멤버에서 지원 이식 가능한 클래스 라이브러리다음에서 지원: Windows 스토어 앱용 .NETWait(Object)개체의 잠금을 해제한 다음 잠금을 다시 가져올 때까지 현재 스레드를 차단합니다.
Public 메서드정적 멤버에서 지원 이식 가능한 클래스 라이브러리다음에서 지원: Windows 스토어 앱용 .NETWait(Object, Int32)개체의 잠금을 해제한 다음 잠금을 다시 가져올 때까지 현재 스레드를 차단합니다. 지정된 시간 제한 간격이 지나면 스레드가 준비된 큐에 들어갑니다.
Public 메서드정적 멤버에서 지원 이식 가능한 클래스 라이브러리다음에서 지원: Windows 스토어 앱용 .NETWait(Object, TimeSpan)개체의 잠금을 해제한 다음 잠금을 다시 가져올 때까지 현재 스레드를 차단합니다. 지정된 시간 제한 간격이 지나면 스레드가 준비된 큐에 들어갑니다.
Public 메서드정적 멤버Wait(Object, Int32, Boolean)개체의 잠금을 해제한 다음 잠금을 다시 가져올 때까지 현재 스레드를 차단합니다. 지정된 시간 제한 간격이 지나면 스레드가 준비된 큐에 들어갑니다. 또한 이 메서드는 컨텍스트의 동기화 도메인(동기화된 컨텍스트에 있는 경우)을 대기 전에 종료하고 나중에 다시 가져오는지 여부도 지정합니다.
Public 메서드정적 멤버Wait(Object, TimeSpan, Boolean)개체의 잠금을 해제한 다음 잠금을 다시 가져올 때까지 현재 스레드를 차단합니다. 지정된 시간 제한 간격이 지나면 스레드가 준비된 큐에 들어갑니다. 필요에 따라 동기화된 컨텍스트의 동기화 도메인을 대기 전에 종료하고 나중에 해당 도메인을 다시 가져옵니다.
위쪽

Monitor 클래스는 하나의 스레드에 개체 잠금을 부여하여 개체에 대한 액세스를 제어합니다. 개체 잠금 기능을 사용하면 일반적으로 임계 영역이라고 불리는 코드 블록에 대한 액세스를 제한할 수 있습니다. 한 스레드에서 개체 잠금을 소유하는 동안에는 다른 스레드에서 해당 잠금을 가져올 수 없습니다. 다른 스레드에서 잠겨 있는 다른 개체를 사용하여 코드를 실행하는 경우에만 Monitor를 사용하여 다른 스레드에서 잠금 소유자가 실행하고 있는 응용 프로그램 코드의 섹션에 액세스할 수 있도록 할 수도 있습니다.

참고참고

Monitor 를 사용하여 값 형식이 아닌 개체(참조 형식)를 잠급니다. 자세한 내용은 Enter 메서드의 오버로드 및 개념 항목 Monitor를 참조하십시오.

Monitor 의 기능은 다음과 같습니다.

  • 필요할 때 개체와 연결됩니다.

  • 바인딩 해제되어 있으므로 모든 컨텍스트에서 직접 호출할 수 있습니다.

  • Monitor 클래스의 인스턴스를 만들 수 없습니다.

동기화된 각 개체에 대하여 다음 정보가 유지됩니다.

  • 현재 잠금을 보유한 스레드에 대한 참조

  • 잠금을 가져올 준비가 된 스레드가 포함된 준비된 큐에 대한 참조

  • 잠겨 있는 개체의 상태 변경 알림을 기다리는 스레드가 포함된 대기 중인 큐에 대한 참조

다음 표에서는 동기화된 개체에 액세스한 스레드에서 취할 수 있는 동작을 설명합니다.

작업

설명

Enter , TryEnter

개체 잠금을 가져오고, 임계 영역의 시작을 표시합니다. 다른 스레드는 잠겨 있는 다른 개체를 사용하여 임계 영역에서 명령을 실행하는 경우에만 임계 영역에 들어갈 수 있습니다.

Wait

다른 스레드에서 개체를 잠그고 액세스할 수 있도록 개체 잠금을 해제합니다. 호출한 스레드는 다른 스레드가 개체에 액세스하는 동안 대기합니다. 대기 중인 스레드에 개체의 상태 변경에 대해 알리는 데는 펄스 신호를 사용합니다.

Pulse (부호), PulseAll

하나 이상의 대기 중인 스레드에 신호를 보냅니다. 이 신호는 잠겨 있는 개체의 상태가 변경되었고 잠금의 소유자가 잠금을 해제할 준비가 되었음을 대기 중인 스레드에 알립니다. 대기 중인 스레드는 개체 잠금을 받을 수 있도록 개체의 준비된 큐에 배치됩니다. 스레드에서는 잠금을 소유하게 되면 개체의 새로운 상태가 요청된 상태에 도달했는지 확인합니다.

Exit

개체 잠금을 해제하고, 잠겨 있는 개체에서 보호하는 임계 영역의 끝을 표시합니다.

임계 영역의 시작과 끝을 표시하려면 EnterExit 메서드를 사용하십시오. 임계 영역이 인접한 명령의 집합인 경우 Enter 메서드에서 잠금을 가져오면 하나의 스레드에서만 잠긴 개체와 함께 포함된 코드를 실행할 수 있도록 해 줍니다. 이 경우 해당 명령은 try 블록에 배치하고 Exit 명령은 finally 블록에 배치하는 것이 좋습니다. 이 기능은 일반적으로 클래스의 정적 메서드 또는 인스턴스 메서드에 대한 액세스를 동기화하는 데 사용합니다. Enter Exit 메서드에서 제공하는 기능은 C#의 lock(Visual Basic의 경우 SyncLock) 문에서 제공하는 기능과 동일합니다. 이 경우 lockSyncLock은 모니터가 해제되도록 tryfinally(Visual Basic의 경우 TryFinally) 블록에서 Enter(Object, Boolean) 메서드 오버로드 및 Exit 메서드를 래핑한다는 점이 다릅니다.

.NET Framework 4부터는 EnterTryEnter 메서드에 대한 두 오버로드 집합이 있습니다. 그 중 한 오버로드 집합은 잠금을 가져올 때 예외가 throw되어도 잠금을 가져오면 true로 자동 설정되는 ref(Visual Basic의 경우 ByRef) Boolean 매개 변수를 갖습니다. 잠금으로 보호되는 리소스의 상태에 일관성이 없더라도 모든 경우에 잠금을 해제하는 데 반드시 필요하면 이러한 오버로드를 사용합니다.

임계 영역의 범위가 메서드 전체인 경우 메서드에 System.Runtime.CompilerServices.MethodImplAttribute를 배치하고 MethodImplAttribute의 생성자에 Synchronized 값을 지정하면 위에서 설명한 잠금 기능을 얻을 수 있습니다. 이 특성을 사용하면 EnterExit 문이 필요 없습니다. 해당 특성은 메서드에서 반환할 때까지 현재 스레드에서 잠금을 보유하도록 합니다. 따라서 잠금을 빨리 해제할 수 있으면 해당 특성 대신 Monitor 클래스나 C# lock 문을 사용하십시오.

주어진 개체를 잠금 및 해제하는 EnterExit 문은 해당 멤버나 클래스 경계 또는 양쪽 모두를 벗어나 외부 개체에 영향을 미칠 수 있지만, 이 방법은 사용하지 않는 것이 좋습니다.

동기화할 개체를 선택할 때는 private 또는 내부 개체에 대해서만 잠가야 합니다. 외부 개체를 잠그면 관련되지 않은 코드에서 다른 목적으로 잠그기 위해 같은 개체를 선택할 수 있으므로 교착 상태가 될 수 있습니다.

참고참고

HostProtectionAttribute 이 형식 또는 멤버에 적용되는 특성은 다음과 같습니다. Resources 속성 값: Synchronization | ExternalThreading. HostProtectionAttribute 는 대개 아이콘을 두 번 클릭하거나, 명령을 입력하거나, 브라우저에서 URL을 입력하여 시작되는 데스크톱 응용 프로그램에 영향을 미치지 않습니다. 자세한 내용은 다음을 참조하십시오. HostProtectionAttribute 클래스 또는 SQL Server 프로그래밍 및 호스트 보호 특성.

.NET Framework

4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0에서 지원

.NET Framework Client Profile

4, 3.5 SP1에서 지원

이식 가능한 클래스 라이브러리

이식 가능한 클래스 라이브러리에서 지원

Windows 스토어 앱용 .NET

Windows 8에서 지원

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(서버 코어 역할은 지원되지 않음), Windows Server 2008 R2(서버 코어 역할은 SP1 이상에서 지원, Itanium은 지원되지 않음)

.NET Framework 에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 다음을 참조하십시오. .NET Framework 시스템 요구 사항.

이 형식은 스레드로부터 안전합니다.

커뮤니티 추가 항목

추가
표시:
© 2014 Microsoft