Dining Philosopher Monitor
Monitor Philosopher {
int state[5];
condition self[5];
void entry Pickup(me) {
state[me] = HUNGRY;
test(me);
if(state[me] != EATING)
wait(self[me]);
}
void entry Putdown(me) {
state[me] = THINKING;
test(left);
test(right);
}
void test(me) {
if((state[left] != EATING) && (state[me] == HUNGRY) && (state[right] != EATING)) {
state[me] = EATING;
signal(self[me]);
}
Philosopher() {
state[me] = THINKING;
}
};
Previous slide
Next slide
Back to first slide
View graphic version