서버 개발/멀티쓰레드 프로그래밍

SRWLock / Critical Section / Mutex 장단점 비교

지노윈 2025. 9. 18. 11:06
반응형

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
반응형