반응형
SRWLOCK (Slim Reader/Writer Lock)
장점
- 가볍고 빠름: 유저 모드에서 동작, 커널 전환 최소화
- 읽기/쓰기 모드 지원:
- 여러 스레드가 동시에 읽기 가능 (Shared)
- 쓰기는 한 스레드만 (Exclusive)
- 조건 변수와 함께 사용 가능: SleepConditionVariableSRW 지원
- 자동 초기화: 별도 Initialize 필요 없음 (구조체 초기화만으로 사용 가능)
단점
- 재진입 불가: 같은 스레드가 같은 락을 다시 획득하면 교착 상태 발생
- 프로세스 내부 전용: 다른 프로세스와 공유 불가
- Windows Vista 이후에서만 지원 → 호환성 제한
Mutex
장점
- 프로세스 간 동기화 가능: OS 커널 오브젝트 기반 → 여러 프로세스에서 공유 가능
- 재진입 가능 (Reentrant): 같은 스레드가 여러 번 획득 가능 (카운트 증가)
- OS 차원의 안정성: 신뢰성 높은 동기화
단점
- 무겁고 느림: 항상 커널 오브젝트를 거치므로 성능 오버헤드가 큼
- 락 해제 비용이 큼 (커널 전환 발생)
- 간단한 경우에는 과도한 선택 (프로세스 내부 전용이라면 Critical Section이나 SRWLock이 낫다)
Critical Section
장점
- 빠르고 가벼움: 대부분 유저 모드에서 동작
- 재진입 가능: 같은 스레드가 여러 번 진입 가능 (락 카운트 증가)
- Windows XP부터 지원: 호환성 좋음
- 실무에서 자주 사용: 공유 데이터 보호에 적합
단점
- 프로세스 내부 전용: 다른 프로세스 간 동기화 불가
- 배타적 락만 제공: Reader/Writer 모드 없음
- 초기화/삭제 필요: InitializeCriticalSection, DeleteCriticalSection 호출해야 함
종합 비교표
항목 | SRWLOCK | Critical Section | Mutex |
속도 | 가장 빠름 | 빠름 | 가장 느림 |
무게감 | 매우 가벼움 | 가벼움 | 무거움 |
락 모드 | 공유/배타 (Reader/Writer) | 배타 전용 | 배타 전용 |
재진입 | 불가능 | 가능 | 가능 |
범위 | 프로세스 내부 | 프로세스 내부 | 프로세스 간 가능 |
초기화 | 필요 없음 (Zero-init) | 필요함 | 필요 없음 (CreateMutex) |
사용 난이도 | 중간 (주의점 많음) | 쉬움 | 쉬움 |
호환성 | Vista 이상 | XP 이상 | 오래된 Windows 전부 지원 |
선택 가이드
- 프로세스 내부, 고성능 필요 → SRWLOCK (특히 Reader 많을 때)
- 프로세스 내부, 단순 배타 제어 → Critical Section (가장 실무에서 많이 쓰임)
- 프로세스 간 동기화 필요 → Mutex
반응형
'서버 개발 > 멀티쓰레드 프로그래밍' 카테고리의 다른 글
ABA 문제와 사례 (0) | 2025.09.18 |
---|---|
대표적인 락/동기화 도구 : Event, Semaphore, Condition Variable, Interlocked 함수, Spin Lock, Slim Tools (0) | 2025.09.18 |
Epoch-based Reclamation (EBR, 시기 기반 메모리 회수) (0) | 2025.09.18 |
위험 포인터(Hazard Pointer) (0) | 2025.09.18 |