여러 프로세스가 자원을 공유하며 수행될 때, 각 프로세스에서 공유 자원에 접근하는 프로그램 코드 부분
✔ 공유 자원에 여러 프로세스 or 스레드가 접근하는 것을 제한하는 방법.
✔ 현재 공유 자원의 상태를 나타내는 카운터 변수를 사용한다.
✔ 이 변수는 운영체제 또는 커널에 값으로 저장된다.
세마포어는 칸이 여러 개인 화장실로 비유된다. 사용 가능한 화장실 수 (카운터 변수)가 있고, 누군가 들어가면 카운터 변수에서 1을 뺀다. 나올 때는 1을 더해준다.
✔ 상호 배제(Mutual Exclusion)를 뜻하는 말.
✔ 임계 구역을 가지는 스레드들의 실행시간이 겹치지 않고 단독으로 실행되게 하는 기술.
✔ Lock과 Unlock 개념을 사용하며 이진 세마포어와 같은 개념.
뮤텍스는 칸이 하나뿐인 화장실로 비유된다. 열쇠가 있으면 화장실을 사용 가능하다는 뜻이고 열쇠를 이용해 화장실에 들어갈 수 있다. 열쇠가 없으면 대기해야한다.
✔ 세마포어는 공유 자원에 세마포어의 변수만큼의 프로세스 or 스레드가 접근 가능.
✔ 뮤텍스는 오직 1개의 프로세스 or 스레드가 접근 가능.
✔ 세마포어는 현재 공유 자원을 사용 중인 대상 외에 다른 프로세스 or 스레드도 잠금 상태 해제 가능.
✔ 뮤텍스는 Lock을 가진 변수만이 Unlock 가능.
✔ 뮤텍스는 동기화 대상이 1개일 때 사용, 세마포어는 동기화 대상이 1개 이상일 때 사용.