다음을 통해 공유


Monitor Synchronization 기술 샘플

업데이트: 2007년 11월

이 샘플에서는 스레드 동기화를 위해 Monitor 클래스를 사용하는 방법을 보여 줍니다. 보호된 코드 블록에 단독으로 액세스하도록 하는 데 Monitor 형식의 정적 함수를 사용합니다.

스레드 동기화와 Monitor 클래스에 대한 자세한 내용은 build.proj 파일과 소스 코드의 주석을 참조하십시오.

샘플 사용에 대한 자세한 내용은 다음 항목을 참조하십시오.

Download sample

명령 프롬프트를 사용하여 샘플을 빌드하려면

  1. 명령 프롬프트 창을 열고 샘플에 대한 언어별 하위 디렉터리 중 하나로 이동합니다.

  2. 선택한 프로그래밍 언어에 따라 명령줄에 msbuild MonitorSynchronizationCS.sln 또는 msbuild MonitorSynchronizationVB.sln을 입력합니다.

Visual Studio를 사용하여 샘플을 빌드하려면

  1. Windows 탐색기를 열고 샘플에 대한 언어별 하위 디렉터리 중 하나로 이동합니다.

  2. 선택한 프로그래밍 언어에 따라 MonitorSynchronizationCS.sln 또는 MonitorSynchronizationVB.sln 아이콘을 두 번 클릭하여 Visual Studio에서 해당 파일을 엽니다.

  3. 빌드 메뉴에서 솔루션 빌드를 클릭합니다.

이 샘플을 실행하려면

  1. 명령 프롬프트를 사용하여 새 실행 파일이 포함된 디렉터리로 이동합니다.

  2. 명령줄에서 Monitor.exe를 입력합니다.

참고:

이 샘플은 콘솔 응용 프로그램을 빌드합니다. 출력을 보려면 명령 프롬프트를 사용하여 시작해야 합니다. 샘플을 실행할 때 각 작성기의 "Start Writing" 출력과 "Stop Writing" 출력은 ID가 서로 다른 스레드와 겹치지 않고 연속적으로 발생합니다. 스레드에서 리소스를 단독으로 사용할 수 있기 때문입니다.

설명

다음 글머리 기호의 내용은 이 샘플에서 사용되는 클래스와 기술을 간단하게 설명한 것입니다.

  • 스레드 동기화

    • Monitor 보호된 코드 블록에서 나오거나 들어갈 수 있는 정적 함수를 제공합니다. Monitor 형식의 인스턴스는 인스턴스화할 수 없습니다. 대신 단일 동기화 노드로 사용할 개체 파생 형식에 대한 참조를 정적 메서드에 전달합니다.

      참고:

      Visual Basic과 C# 모두 특수 키워드를 구현하여 Monitor 형식의 정적 메서드를 사용합니다. C#에서는 lock 키워드를 사용하고, Visual Basic에서는 SyncLock 키워드를 사용합니다.

    • AutoResetEvent 샘플의 주 스레드가 설정될 때까지 AutoResetEvent 개체를 기다립니다. 즉, 마지막 비동기 함수의 작업이 완료될 때까지 기다립니다.

    • Interlocked 샘플에서는 정적 Decrement 메서드를 사용하여 AutoResetEvent를 설정해야 하는 경우를 나타내는 카운터 변수에 비동기적으로 액세스합니다.

  • 스레딩

    • ThreadPool 개발자는 관리 코드를 작성할 때 가능하면 QueueUserWorkItem 메서드를 사용하여 비동기 메서드 호출을 구현하는 것이 좋습니다. 이 샘플에서는 이 방법을 사용하여 논리 리소스를 사용하기 위해 경쟁하는 코드를 실행합니다.
  • 대리자

참고 항목

개념

관리되는 스레드 풀

참조

AutoResetEvent 클래스

Delegate 클래스

Interlocked 클래스

Monitor 클래스

System.Threading 네임스페이스

Thread 클래스

ThreadPool 클래스

ThreadStart 대리자

WaitCallback 대리자

기타 리소스

관리되는 스레딩

스레딩 개체 및 기능