whilw(true){
wait(empty); // 생산자가 넣기 위해 버퍼가 비었는지 확인한다.
wait(mutex) ;
/* 버퍼에 생산한 것을 넣는다*/
signal(mutex); //하나 넣었으니 다른 사람 접근 가능하게 함
signal(full)
while(true){
wait(full);
wait(mutex);
/*버퍼에 있는 것 소비 */
signal(mutex);
signal(empty);
/*
while(true){
wait(rw_mutex); // rw_mutex는 1로 initialized되어 있다.
/*writing is performed*/
signal(rw_mutex);
}
while(true){
wait(mutex); //mutex.rw_mutes는 1로 초기화
read_count++; //read_count는 0으로 초기화
if(read_count == 1)
wait(rw_mutex);
signal(mutex);
/*reading is performed*/
wait(mutex);
read_count--;
if(read_count == 0)
signal(rw_mutex);
signal(mutex);
식사하는 철학자들 문제는 고전적 동기화 문제로, 철학자들이 밥을 먹기 위해서(프로세스가 요청 사항을 수행) 양쪽에 있는 젓가락을 하나씩 사용(시스템 내의 자원을 사용)해야 하는 경우를 생각해보자.
식사하는 철학자들의 문제는 고전적인 동기화 문제로 병행실행시 교착상태와 기아를 발생 시키지 않고 여러 스레드, 프로세스에게 여러 자원을 할당해야 할 필요를 단순히 표현한 것이다.
교착상태를 해결하는 데에는 다음과 같은 방법이 있다.
하지만 교착상태가 해결된다는 것이 기아를 방지 하지 않는다.