Mutex Lock과 Semaphore의 차이에 대해서 설명하고 어느 상황에 쓰는게 적절한지 설명해주세요.
답 보기
- 🔒 Mutex Lock vs Semaphore 비교
구분 | Mutex Lock | Semaphore |
---|---|---|
목적 | 상호 배제 (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 Semaphore | 0 또는 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를 점유하지 않아 다른 스레드가 작업 가능
- 짧은 CS: Mutex (Spin Lock) > Semaphore
-
구현 시 고려사항:
- OS 레벨에서는 block queue 또는 spinlock을 활용해 구현
- 스레드가 리소스를 기다릴 때, ready queue가 아닌 blocked queue에 들어감
- Context Switching은 운영체제 스케줄러가 결정함 (Semaphore 자체 기능이 아님)
-