세마포어와 뮤텍스 모두 여러 프로세스 또는 쓰레드가 임계 영역을 동시에 접근하지 못하도록 막는 메커니즘이다.
하지만 여러 차이점이 존재한다.
가장 큰 차이점이라고 할 수 있다.
이러한 차이는 두 메커니즘의 차이로부터 발생한다.
뮤텍스는 상태가 두개(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