Reader-Writer Synchronization 기술 샘플
업데이트: 2007년 11월
이 샘플에서는 ReaderWriterLock 스레드 동기화 클래스를 사용하는 방법을 보여 줍니다. ReaderWriterLock 형식의 기능을 통해 개발자는 스레드에서 공유 리소스에 쓰거나 공유 리소스를 수정하는 동안에는 리소스를 단독으로 사용해야 하지만 리소스를 읽거나 쿼리할 때는 비독점적으로 사용할 수 있도록 허용하는 코드를 작성할 수 있습니다.
샘플 사용에 대한 자세한 내용은 다음 항목을 참조하십시오.
명령 프롬프트를 사용하여 샘플을 빌드하려면
명령 프롬프트 창을 열고 샘플에 대한 언어별 하위 디렉터리 중 하나로 이동합니다.
선택한 프로그래밍 언어에 따라 명령줄에서 msbuild ReaderWriterSynchronizationCS.sln 또는 msbuild ReaderWriterSynchronizationVB.sln을 입력합니다.
Visual Studio를 사용하여 샘플을 빌드하려면
Windows 탐색기를 열고 샘플에 대한 언어별 하위 디렉터리 중 하나로 이동합니다.
선택한 프로그래밍 언어에 따라 ReaderWriterSynchronizationCS.sln 또는 ReaderWriterSynchronizationVB.sln 아이콘을 두 번 클릭하여 Visual Studio에서 해당 파일을 엽니다.
빌드 메뉴에서 솔루션 빌드를 클릭합니다.
이 샘플을 실행하려면
새 실행 파일이 들어 있는 디렉터리로 이동합니다.
명령줄에서 ReaderWriter.exe를 입력합니다.
참고:
이 샘플은 콘솔 응용 프로그램을 빌드합니다. 출력을 보려면 명령 프롬프트에서 시작해야 합니다. 샘플을 실행할 때 각 작성기의 Start Writing 및 Stop Writing 출력이 연속적으로 발생합니다. 판독기와 달리 작성기는 리소스를 단독으로 사용할 수 있기 때문입니다.
설명
스레드 동기화 및 단독 액세스에 대한 자세한 내용은 build.proj 파일 및 소스 코드의 주석을 참조하십시오.
다음 글머리 기호의 내용은 이 샘플에서 사용되는 클래스와 기술을 간단하게 설명한 것입니다.
- 스레드 동기화
ReaderWriterLockSleep에 대한 호출로 구현되는 논리 리소스를 보호하는 데 사용됩니다. ReaderWriterLock 형식을 사용하는 스레드는 두 가지 방법으로 잠금을 유지할 수 있습니다. 첫 번째로, 스레드는 다른 스레드에서 클래스에 대한 읽기 잠금을 받을 수 있는 비독점적인 읽기 잠금을 유지할 수 있습니다. 두 번째로는 현재 유지되어 있는 읽기 및 쓰기 잠금이 해제될 때까지 허용되지 않는 독점적인 쓰기 잠금을 요청할 수 있습니다.
AutoResetEvent 샘플의 주 스레드가 설정될 때까지 AutoResetEvent 개체를 기다립니다. 즉, 마지막 비동기 함수의 작업이 완료될 때까지 기다립니다.
Interlocked샘플에서는 정적 Interlocked.Increment 및 Interlocked.Decrement 메서드를 사용하여 AutoResetEvent를 설정해야 하는 경우를 나타내는 카운터 변수에 비동기적으로 액세스합니다.
스레딩
- ThreadPool 개발자는 관리 코드를 작성할 때 가능하면 QueueUserWorkItem 메서드를 사용하여 비동기 메서드 호출을 구현하는 것이 좋습니다. 이 샘플에서는 이 방법을 사용하여 논리 리소스를 사용하기 위해 경쟁하는 코드를 실행합니다.
대리자
- WaitCallbackThreadPool 클래스에 사용할 형식 안전적인 콜백 메서드를 만드는 데 사용됩니다.