int turn;
initially turn = 0; # Pi can enter its critical section if (turn == i)
semaphore chopstick[5];
/* Initially all values are 1*/
do{
P(chopstick[i];)
P(chopstick[(i+1)%5]);
...
eat();
...
V(chopstick[i]);
V(chopstick[(i+1)%5]);
...
think();
...
} while(1);
condition x, y;
x.wait();
x.wait()
을 invoke 한 프로세스는 다른 프로세스가 x.signal()
을 invoke 하기 전까지 suspend 된다
x.signal()
x.signal()
은 정확하게 하나의 suspend 된 프로세스를 resume 한다.
Suspend 된 프로세스가 없으면 아무 일도 일어나지 않는다.