뮤텍스 락(Mutex Locks): 가장 간단한 동기화 도구 → “2개의 프로세스”
임계 영역에 진입할 때 lock을 걸어 다른 프로세스에서 접근하지 못하게 하고, 임계 영역에서 빠져나올 때 lock을 푼다.
세마포어(Semaphore): n개의 프로세스를 관리할 수 있기 때문에 보편적이고, 효율적인 방식. (6.6에서 자세히 다룰 예정)
모니터(Monitor): 뮤텍스와 세마포어의 단점을 극복한 방식
⇒ 위 3가지 해결방법은 “상호배제”만 해결해준다.
Mutex : 상호 배제 (mutual exclusion**)**
임계영역에 들어가기 위한 락(열쇠)을 획득하는 과정을 acquire, 다시 락을 반납하는 과정을 release라고 부름.

구현을 위해 **2개의 메소드 (acquire(), release())와 1개의 변수 (bool available)**가 필요하다.
acquire()
{
while (!available)
; // busy wait
available = false;
}
release()
{
available = true;
}
acquire()와 release() 모두 **원자적 (atomically)**으로 구현되어야 한다 → compare_and_swap을 이용해 구현할 수 있다.
(두 메소드 실행 중에 Context Switch가 일어나 원하는 결과가 나오지 않을수도 있기때문)
프로세스가 임계영역에 들어가기 위해 acquire() 메소드에서 무한루프를 돌면서
CPU를 낭비하는 현상
멀티프로그래밍 시스템에서 심각한 문제. Ready Queue에서 실행을 기다리고 있는 프로세스들이 있는데 한 프로세스가 CPU 리소스를 낭비하게 되면 효율이 좋지 않다.