Higher-level solution for CSP

⇒ 위 3가지 해결방법은 “상호배제”만 해결해준다.

뮤텍스 락(Mutex Lock)

Mutex : 상호 배제 (mutual exclusion**)**

임계영역에 들어가기 위한 락(열쇠)을 획득하는 과정을 acquire, 다시 락을 반납하는 과정을 release라고 부름.

Untitled

구현을 위해 **2개의 메소드 (acquire(), release())와 1개의 변수 (bool available)**가 필요하다.

acquire()
{
	while (!available)
		; // busy wait
	available = false;
}

release()
{
	available = true;
}

acquire()와 release() 모두 **원자적 (atomically)**으로 구현되어야 한다 → compare_and_swap을 이용해 구현할 수 있다.

(두 메소드 실행 중에 Context Switch가 일어나 원하는 결과가 나오지 않을수도 있기때문)

Busy waiting

멀티프로그래밍 시스템에서 심각한 문제. Ready Queue에서 실행을 기다리고 있는 프로세스들이 있는데 한 프로세스가 CPU 리소스를 낭비하게 되면 효율이 좋지 않다.

Spinlock