C# ReaderWriterLock이란?
ReaderWriterLock은 여러 스레드가 하나의 공유 리소스에 접근할 때 이를 동기화하기 위해 사용되는 클래스입니다.
일반적인 Monitor는 한 번에 하나의 스레드만 잠금을 획득할 수 있는 반면, ReaderWriterLock은 읽기 작업과 쓰기 작업을 구분하여 처리함으로써 더 높은 처리량(throughput)을 제공합니다. 따라서 리소스가 자주 변경되지 않고 읽기 요청이 많은 환경에서 특히 효과적입니다.
ReaderWriterLock 선언 방법
C#에서 ReaderWriterLock을 선언하는 기본 문법은 다음과 같습니다.
static ReaderWriterLock r = new ReaderWriterLock();
ReaderWriterLock의 주요 속성
ReaderWriterLock에서 제공하는 대표적인 속성은 다음과 같습니다.
| 번호 | 속성 및 설명 |
|---|---|
| 1 | IsReaderLockHeld 현재 스레드가 읽기(reader) 잠금을 보유하고 있는지 여부를 나타내는 값을 반환합니다. |
| 2 | IsWriterLockHeld 현재 스레드가 쓰기(writer) 잠금을 보유하고 있는지 여부를 나타내는 값을 반환합니다. |
| 3 | WriterSeqNum 현재 시퀀스 번호(sequence number)를 반환합니다. |
ReaderWriterLock의 주요 메서드
ReaderWriterLock에서 자주 사용되는 메서드는 다음과 같습니다.
| 번호 | 메서드 및 설명 |
|---|---|
| 1 | AcquireReaderLock(TimeSpan) TimeSpan 값을 타임아웃으로 지정하여 읽기 잠금을 획득합니다. |
| 2 | AcquireWriterLock(TimeSpan) TimeSpan 값을 타임아웃으로 지정하여 쓰기 잠금을 획득합니다. |
| 3 | Equals(Object) 지정된 개체가 현재 개체와 같은지 여부를 확인합니다. (Object 클래스에서 상속됨) |
| 4 | GetHashCode() 기본 해시 코드를 반환합니다. |
| 5 | GetType() 현재 인스턴스의 형식(Type)을 반환합니다. |
| 6 | ReleaseReaderLock() 잠금 카운트(lock count)를 감소시켜 읽기 잠금을 해제합니다. |