뮤텍스
IT 위키
Mutex; Mutual Exclusion Object
임계구역에 하나의 스레드만 들어가도록 보장하는 동기화 기법
- 이름은 상호배제(Mutual Exclusion)에서 왔다.
- 잠금(lock)을 획득한 주체만 해제할 수 있다. 이 소유권 개념이 세마포어와의 핵심 차이다.
- 잠금을 얻지 못한 스레드는 대기 상태로 들어갔다가, 잠금이 풀리면 깨어난다.
| 구분 | 뮤텍스 | 세마포어 |
|---|---|---|
| 허용 개수 | 1개 (이진) | N개 (계수 가능) |
| 소유권 | 있다 — 잠근 스레드만 해제 | 없다 — 다른 스레드도 신호 가능 |
| 용도 | 자원 하나에 대한 배타적 접근 | 자원 N개의 사용 개수 관리 |
| 비유 | 화장실 열쇠 1개 | 좌석 N개짜리 대기표 |
이진 세마포어(값이 0 또는 1)는 뮤텍스와 비슷해 보이지만, 소유권이 없어서 잠그지 않은 스레드가 풀어 버릴 수 있다는 점이 다르다.
- 교착상태 : 여러 뮤텍스를 서로 다른 순서로 잠그면 발생한다. 잠금 순서를 정해 두면 예방된다.
- 우선순위 역전 : 낮은 우선순위 스레드가 잠금을 쥔 채 선점되면 높은 우선순위 스레드가 대기한다. 우선순위 상속으로 완화한다.
- 임계구역은 짧게 유지한다. 길면 병렬성이 떨어진다.
