OS - Mutex / Semaphore (뮤텍스/세마포어)
Mutex vs Semaphore
공통적으로 공유된 자원의 데이터를 여러 스레드/프로세스가 접근하는 것을 막는 역할
Critical Section
- 공유 데이터에 접근하고 있는 코드 부분 (여러 개의 프로세스가 공유 데이터에 접근할 수 있는 영역)
- 코딩 시 이 critical section을 최소하해서 설계해야 함
![업로드중..]()
뮤텍스
- 어떤 프로세스가 소유할 수 있는 Key를 가지고 상호배제를 시행 함.
- 이 Key에 해당하는 object가 존재하고, 이 object를 가지고 있어야만 공유 데이터에 접근 가능.
- 즉, 이 Mutex 객체를 두 개의 프로세스/스레드가 동시에 사용할 수 없음
세마포어
- 공통으로 관리하는 하나의 값을 이용해 상호배제(공유 자원에 대해서 겹치지 않게 사용하는 것)를 함
- 어떤 정해진 값이 있고, 그 값만큼 프로세스/스레드가 공유 자원에 대해 접근 가능함
- 이 경우 각 프로세스/스레드는 세마포어 값을 확인 및 변경 가능
![업로드중..]()
뮤텍스, 세마포어 차이
- 동기화 대상 개수 : 뮤텍스 1개 / 세마포어 1개 이상
- 세마포어는 뮤텍스가 될 수 있음. 뮤텍스는 세마포어가 될 수 없음
- 뮤텍스 : 자원 소유 가능 / Lock을 통해 자원 소유 가능
- 뮤텍스 : 자원을 이용하고 있는 프로세스/스레드만으로만 mutex 해제 가능
[출처]