뮤텍스와 세마포어는 스레드 동기화의 방법입니다. 뮤텍스는 잠금 기반 동작이며, 하나의 스레드만 동시에 임계 구역에 존재할 수 있습니다. 반면 세마포어는 시그널 기반 동작이며, 여러 스레드가 동시에 임계 구역에 존재할 수 있습니다.
스레드 동기화
스레드 동기화는 경쟁 조건이 발생하지 않도록 하기 위해, 공유 자원에 대한 접근을 조정하는 것을 말합니다.
공유 자원
경쟁 조건
- 여러개의 프로세스가 동일한 자원에 접근하여 조작함
- 실행 결과가 자원에 접근하는 순서에 따라 달라짐
임계 구역
- 한번에 하나의 프로세스만 접근할 수 있는 구역
- 임계 구역에는 공유 자원이 포함됨
- 임계 구역 문제 해결 조건

뮤텍스 (Mutual Exclusion Object)
- 한 번에 하나의 스레드만 임계 영역에 존재
- 잠금 기반 동작
- 스레드가 시스템에 공유 자원을 요청
- 시스템은 고유한 뮤텍스 객체를 생성
➡️ 다른 스레드는 공유 자원을 사용할 수 없음
- 스레드는 뮤텍스 객체를 사용
- 시스템은 뮤텍스 객체를 해제
➡️ 다른 스레드는 공유 자원을 사용할 수 있음
세마포어
- 여러 스레드가 동시에 임계 영역에 존재할 수 있음
- 신호 기반 동작
Semaphore(1) : 세마포어의 값이 1인 상태
P() : 스레드의 임계 구역 진입
- 스레드가 세마포어의 값을 0으로 변경함 (감소)
- 공유 자원을 사용함
➡️ 세마포어의 값이 0이므로, 다른 스레드는 공유 자원을 사용할 수 없음
V() : 스레드가 임계 구역 탈출
- 스레드가 세마포어의 값을 1로 변경함 (증가)
- 공유 자원 해제
- 세마포어에서 대기하는 스레드에 WAKE_UP 시그널을 보냄
➡️ 다른 스레드는 공유 자원을 사용할 수 있음
Introduction of Process Synchronization
Mutex vs Semaphore
Difference between Mutex and Semaphore in Operating System