핵심 키워드 : 뮤텍스 락, 세마포어, 모니터

프로세스를 동기화하지 않으면 겉보기에 아무런 문제 없이 보이는 코드도 예기치 못하게 작동할 수 있다.

뮤텍스 락

임계 구역 문제와 이를 해결하기 위한 동기화를 옷 가게에서 탈의실을 이용하는 것에 비유해 보자. 옷을 입어보러 탈의실에 들어갈 때 한 명의 인원만 들어갈 수 있도록하는 것. 손님은 프로세스, 탈의실은 임계 구역이라할 수 있다.

뮤텍스 락(Mutext lock: MUTual Exclusion lock) : 동시에 접근해서는 안되는 자원에 동시에 접근하지 않도록 만드는 도구이다.

임계 구역에 진입하는 프로세스는 내가 지금 임계 구역에 있음을 알리기 위해 뮤텍스 락을 이용해 임계 구역에 자물쇠를 걸어둘 수 있고, 다른 프로세스는 임계 구역이 잠겨 있다면 기다리고, 잠겨 있지 않다면 임계 구역에 진입할 수 있다.

뮤텍스 락의 형태 : 하나의 전역 변수와 두 개의 함수로 구현할 수 있다.

acquire 함수 는 프로세스가 임계 구역에 진입하기 전에 호출하는 함수이다. 만약 임계 구역이 잠겨 있다면 임계 구역이 열릴 떄까지(lock이 false가 될 때까지) 임계 구역을 반복적으로 확인하고, 임계 구역이 열려 이싸면 임계 구역을 잠그는(lock이 true로 바꾸는) 함수이다.

release 함수는 임계 구역에서의 작업이 끝나고 호출하는 함수이다. 현재 잠긴 임계 구역을 열어주는(lock을 false로 바꾸는) 함수이다.

탈의실 문이 잠겨 있는지 쉴 새 없이 반복하여 확인하는 대기 방식을 **바쁜 대기(busy wait)**라고 한다.