Mutex
Mutual Exclusion의 합성어로 공유된 자원의 데이터나 임계영역(critical Section) 같은 곳에 스레드들의 서로 겹치지 않거나 하나의 프로세스나 스레드가 접근하는 것을 막는다.
- 동기화 대상이 1개
- 다른 스레드들은 뮤텍스의 lock을 가지기 위해 대기하고 락을 해제하는 스레드가 있을 때까지 접근하지 못한다.
- Key 기반으로 한 상호배제 기법이다.
- 다중 프로세스들의 공유 리소스에 접근을 조율하기 위해 동기화(Sync) 또는 락(Lock)을 사용
그림을 보면 쉽게 이해할 수 있다.

카운터에 있는 화장실 키를 누군가가 가지고 화장실을 이용 중인 경우
다른 사람은 해당 화장실을 이용할 수 없다.
하지만 이용을 마친 누군가가 Key를 카운터에 다시 가져다 놓으면 다른 사람들이 화장실을 이용할 수 있다.
이러한 방법이 Mutex이다.
Semaphore
- 사용하고 있는 스레드/프로세스의 수를 공통으로 관리하는 하나의 값을 이용해 상호배제를 달성한다.
- 공유 자원에 접근할 수 있는 프로세스의 최대 허용치만큼 동시에 접근할 수 있다.
- 다른 프로세스들이 모두 사용 중인 경우 기다려야 한다.

화장실이 칸이 여러 개인 경우
비어있으면 즉시 이용가능하지만
만약 칸이 모두 차있는 경우 다음 사람은 이용하지 못하고 기다려야 한다.
이런 방법이 세마포어이다.
차이점
| Mutex | Semaphore | |
| 동기화 개수 | 1개 | 1개 이상 |
| 자원 소유 | 자원 소유가 가능 + 책임 |
자원 소유 불가 |
| 해제 | 소유하고 있는 스레드만이 해제가능하다. | 소유하지 않는 스레드도 해제할 수 있다. |
| 범위 | 프로세스의 범위를 가지고 종료될때 자동으로 사라진다. |
시스템 범위에 걸쳐있고 파일 시스템 상 파일로 존재한다. |
- 데이터 무결성을 보장할 수 없고, 모든 교착상태를 해결하지 못한다.
# 참고한 사이트
[OS] 뮤텍스(Mutex)와 세마포어(Semaphore)란?
프로세스 간 메시지를 전송하거나, 공유메모리를 통해 공유된 자원에 여러 개의 프로세스가 동시에 접근하면 Critical Section 문제가 발생할 수 있다. 이를 해결하기 위해 데이터를 한 번에 하나의
chelseashin.tistory.com