Blog
Anki
운영체제

Mutex Lock과 Semaphore의 차이에 대해서 설명하고 어느 상황에 쓰는게 적절한지 설명해주세요.

답 보기
  • 🔒 Mutex Lock vs Semaphore 비교
구분Mutex LockSemaphore
목적상호 배제 (Mutual Exclusion)리소스 접근 제어 및 동기화
값 범위0 또는 1 (Binary)0 이상의 정수 (Counting)
소유권락을 획득한 스레드만 해제 가능소유권 개념 없음 (다른 스레드가 signal 가능)
구현 방식주로 Spin Lock 사용Block Queue 또는 Spinlock 활용
Context Switching발생하지 않음 (Busy Waiting)발생함 (Blocked Queue 사용 시)
  • 📋 Semaphore의 두 가지 유형
유형설명사용 예시
Counting Semaphore정수 값을 0 이상으로 가지며, 동시에 접근 가능한 리소스의 개수를 의미프린터 3대 → 초기값 3
Binary Semaphore0 또는 1의 값을 가지며, Mutex와 유사하게 동작단일 리소스 보호
  • 🎯 적절한 사용 상황

    • Mutex Lock을 사용해야 하는 경우:

      • Critical Section이 매우 짧은 경우 (마이크로초 단위)
      • Context Switching 비용을 피하고 싶은 경우
      • 단순한 상호 배제만 필요한 경우
      • 실시간 시스템에서 예측 가능한 성능이 필요한 경우
    • Semaphore를 사용해야 하는 경우:

      • 여러 개의 동일한 리소스를 관리해야 하는 경우 (데이터베이스 커넥션 풀, 프린터 등)
      • Critical Section이 긴 경우 (밀리초 이상)
      • CPU 사용률을 효율적으로 관리하고 싶은 경우 (Blocked Queue 사용)
      • Producer-Consumer 패턴 구현 시
      • 스레드 간 동기화 신호가 필요한 경우
  • ⚡ 성능 고려사항

    • Critical Section 길이에 따른 선택:

      • 짧은 CS: Mutex (Spin Lock) > Semaphore
        • Context Switching 비용이 더 클 수 있음
      • 긴 CS: Semaphore (Block Queue) > Mutex
        • CPU를 점유하지 않아 다른 스레드가 작업 가능
    • 구현 시 고려사항:

      • OS 레벨에서는 block queue 또는 spinlock을 활용해 구현
      • 스레드가 리소스를 기다릴 때, ready queue가 아닌 blocked queue에 들어감
      • Context Switching은 운영체제 스케줄러가 결정함 (Semaphore 자체 기능이 아님)