둘다 프로세스간 공유 자원의 동시접근으로 인한 임계영역을 관리하기위해 상호배제를 만족시킬 수 있는 방법들이다.
뮤텍스는 프로세스에 고유의 key라는 객체를 부여하여 공유자원에 접근이 가능하도록 하는 상호배제 기법이다.
예를 들어 화장실을 가는 것으로 대신해서 이야기해보자. 화장실이 1개 밖에없는 가게에 키가있어야만 화장실에 갈 수 있다고 하자. 한명이 키를 가져가서 화장실을 쓰고있다면, 다른 대기자들은 키가올때까지 기다려야만한다. 이것이 뮤텍스 방식이다.
세마포어는 공무자원의 상태 즉 비어있는 공유자원의 개수를 세마포어값으로 나타내어 공유자원 최대허용치만큼 프로세스를 허용하게 해준다.
주차장을 예시로 들자면 주차를 하기전 주차장의 비어있는 자리의 양이 0보다 커야지 차가 들어가서 주차할 수 있는 것과 마찬가지이다.
즉 전광판에 남아있는 주차칸의 개수를 표시하여 빌때까지 기다리게 유도한다. 이처럼 세마포어는 공통으로 관리하는 하나의 값을 이용해 상호배제를 달성한다.
- 뮤텍스는 동기화 대상이 1개 세마포어는 여러개일 때 사용가능하다.
- 세마포어는 뮤텍스가 될 수 있다. 하지만 반대는 안된다.
- 뮤텍스는 소유하고있는 스레드만이 뮤텍스를 해제할 수 있다. 세마포어는 소유하지않아도 해제가능하다.
- 세마포어는 시스템 범위에 걸쳐있고, 뮤텍스는 프로세스 범위를 가진다.