뮤텍스 vs 세마포어: 차이점 설명
뮤텍스는 임계 구역을 보호하여 한 번에 하나의 스레드만 공유 자원을 사용하게 하며, 잠근 스레드가 반드시 잠금을 해제해야 합니다. 세마포어는 카운터로서, 한정된 자원을 사용할 수 있는 스레드 수를 제어하고 한 스레드에서 다른 스레드로 이벤트를 알리는 데에도 쓸 수 있습니다. 뮤텍스는 소유권과 배타성에 관한 것이고, 세마포어는 카운팅과 시그널링에 관한 것입니다.
| 비교 항목 | 뮤텍스 | 세마포어 |
|---|---|---|
| 목적 | 상호 배제: 임계 구역에 한 번에 한 스레드만 | 카운팅: N개 자원 풀에 대한 접근 제한, 또는 스레드 간 이벤트 알림 |
| 값 | 잠김 또는 풀림(이진) | 음이 아닌 정수 카운트(이진 세마포어는 0 또는 1인 특수한 경우) |
| 소유권 | 잠근 스레드가 소유하며, 그 스레드가 해제해야 함 | 소유자 없음: 어떤 스레드든 post 또는 signal 가능 |
| 연산 | Lock과 unlock | Wait(P, 감소)와 post(V, 증가) |
| 스레드 간 시그널링 | 의도된 용도가 아님 | 가능: 예를 들어 생산자가 소비자에게 신호를 보냄 |
| 우선순위 역전 | 우선순위 상속으로 피하는 경우가 많음 | 보통 지원되지 않음 |
| 주요 용도 | 리스트나 카운터 같은 공유 데이터 구조 보호 | 커넥션 풀 제한, 유한 버퍼 생산자-소비자, 인터럽트 핸들러에서 태스크로의 신호 전달 |
| 흔한 함정 | 일관되지 않은 잠금 순서로 인한 교착 상태, 잠금 해제 누락 | 카운트가 맞지 않을 때 발생하는 신호 유실과 교착 상태 |
수치는 대략적인 자릿수 기준이며, 공정 세대와 제품에 따라 달라져요.