동기화 문제 해결을 위해 세마포 이외의 모니터 방식에 대해 알아본다.
Semaphore에 대해서 배웠다. : 동기화 문제를 추상화시켜서 프로그래머로 하여금 쉽게 풀 수 있게금 semaphore 변수를 둬서 자원의 여분을 세고, p연산과 v연산을 통해 자원을 획득하고 반납하게 쉽게 프로세스를 설정할 수 있었다.
모니터는 약간 프로그래밍 언어 차원에서 제공하는 동기화 수단이다. 객체지향 프로그래밍, 객체를 중심으로 연산이 정의되는 것. 공유 데이터를 중심으로 해서 연산들이 함수들이 정의 되어 있다. 공유데이터에 접근할 때는 반드시 모니터 안에 있는 procedure을 통해서만 접근할 수 있게 프로그래머한테 구조를 제공한다. 실제로 모니터가 공유데이터에 대한 모든 책임을 져준다. semaphore는 자기가 책임 안져줬음. 연산을 제공해줬을 뿐. 프로그래머가 lock을 걸고 풀었다. 모니터는 공유데이터에 대한 접근은 오직 함수를 통해서만 접근할 수 있게, 모니터 안에서 active하게 실행하는 process는 하나로 제한하는건 모니터가 알아서 해준다. 공유데이터에 대해서 lock을 걸 필요가 없고 프로그래머는 모니터 안에 있는 코드로서 접근할 수 있게 하면 알아서 동기화가 될 것이다.
x자원 없으면 xqueue에서 기다려
y자원 없으면 yqueue에서 기다려
모니터가 실제로 어떻게 프로그래밍 되는지는 bounded-buffer 문제와 식사하는 철학자 문제로 알아보자~~~ !
monitor의 condition variables은 자원의 개수를 세지 않고, 자원의 여분이 없을 때 잠재우는 큐의 역할을 한다. 되게 자연스러운 역할이야~ 일반적인 상식에 맞게 코딩하면 된다.
생산자는 빈 버퍼가 있어야 하니까 ~ 모니터에서는 동시 접근의 문제가 없으니, 빈버퍼가 있으면 버퍼에 데이터를 넣어주면 되고,