뮤텍스

IT 위키

Mutex; Mutual Exclusion Object

임계구역에 하나의 스레드만 들어가도록 보장하는 동기화 기법

  • 이름은 상호배제(Mutual Exclusion)에서 왔다.
  • 잠금(lock)을 획득한 주체만 해제할 수 있다. 이 소유권 개념이 세마포어와의 핵심 차이다.
  • 잠금을 얻지 못한 스레드는 대기 상태로 들어갔다가, 잠금이 풀리면 깨어난다.

세마포어와의 비교

[편집 | 원본 편집]
구분 뮤텍스 세마포어
허용 개수 1개 (이진) N개 (계수 가능)
소유권 있다 — 잠근 스레드만 해제 없다 — 다른 스레드도 신호 가능
용도 자원 하나에 대한 배타적 접근 자원 N개의 사용 개수 관리
비유 화장실 열쇠 1개 좌석 N개짜리 대기표

이진 세마포어(값이 0 또는 1)는 뮤텍스와 비슷해 보이지만, 소유권이 없어서 잠그지 않은 스레드가 풀어 버릴 수 있다는 점이 다르다.

사용 시 주의

[편집 | 원본 편집]
  • 교착상태 : 여러 뮤텍스를 서로 다른 순서로 잠그면 발생한다. 잠금 순서를 정해 두면 예방된다.
  • 우선순위 역전 : 낮은 우선순위 스레드가 잠금을 쥔 채 선점되면 높은 우선순위 스레드가 대기한다. 우선순위 상속으로 완화한다.
  • 임계구역은 짧게 유지한다. 길면 병렬성이 떨어진다.

같이 보기

[편집 | 원본 편집]