뮤텍스(Mutex) vs 세마포어(Semaphore)

bolee·2022년 8월 29일
0

42seoul

목록 보기
23/27

뮤텍스와 세마포어

세마포어와 뮤텍스 모두 여러 프로세스 또는 쓰레드가 임계 영역을 동시에 접근하지 못하도록 막는 메커니즘이다.

하지만 여러 차이점이 존재한다.

동기화 대상의 갯수

가장 큰 차이점이라고 할 수 있다.

  • 뮤텍스: 동기화 대상이 하나뿐일 때 사용
  • 세마포어: 동기화 대상이 하나 이상일 때 사용

자원의 소유와 책임

  • 뮤텍스: 공유 자원의 소유가 가능하며 소유주가 이에 대한 책임을 진다.
  • 세마포어: 공유 자원을 소유할 수 없다.

이러한 차이는 두 메커니즘의 차이로부터 발생한다.

뮤텍스는 상태가 두개(lock, unlock) 뿐인 lock 이므로 lock 을 ‘가질’ 수 있다.
또한 뮤텍스는 소유하고 있는 쓰레드만이 이 뮤택스를 해제할 수 있기 때문에 해당 쓰레드가 공유 자원에 대한 책임이 발생한다.

반면에, 세마포어의 경우 다양한 상태가 존재하여 세마포어를 소유하지 않는 스레드가 Semaphore를 해제할 수 있어 공유 자원에 대한 소유가 불가능하다.

주의해야 할 점

뮤텍스는 때때로 이진 세마포어(binary semaphore)와 동일한 기본 구현을 사용하는 잠금 메커니즘이기 때문에 바이너리 세마포어를 뮤텍스라고 부를 수 있다.
하지만 진정한 뮤텍스는 뮤텍스를 잠근 작업만이 잠금을 해제해야 한다는 점에서 보다 구체적인 사용 사례와 정의를 가지고 있다는 점을 기억해야 한다.

또한 뮤텍스와 세마포어는 모두 완벽한 기법은 아니므로, 데이터 무결성을 보장할 수 없으며 모든 교착 상태를 해결하지는 못한다.
하지만, 상호배제를 위한 기본적인 기법이며 여기에 좀 더 복잡한 매커니즘을 적용해 개선된 성능을 가질 수 있도록 하는 것이 중요하다.

참고 자료

https://chelseashin.tistory.com/40
https://heeonii.tistory.com/14
https://en.wikipedia.org/wiki/Semaphore_(programming)
https://jwprogramming.tistory.com/13

0개의 댓글