⾄多只允许四位哲学家同时去拿左筷⼦,最终能保证⾄少有⼀位哲学家能进餐,并在⽤完后释放两只筷⼦供他⼈使⽤。
semaphore chopstick[5] = {1, 1, 1, 1, 1};
semaphore r = 4;
Pi() {
while (1) {
P(r); //请求进餐
P(chopstick[i]); //请求左⼿边的筷⼦
P(chopstick[(i + 1) % 5]); //请求右⼿边的筷⼦
eat;
V(chopstick[i]); //放回左边筷⼦
V(chopstick[(i + 1) % 5]); //放回右边筷⼦
V(r);
think;
}
}
规定奇数号哲学家先拿左筷⼦再拿右筷⼦,⽽偶数号哲学家相反。
semaphore chopstick[5] = {1, 1, 1, 1, 1};
Pi() {
while (1) {
if (i % 2 == 0) { //偶数号哲学家
P(chopstick[(i + 1) % 5]); //请求右⼿边的筷⼦
P(chopstick[i]); //请求左⼿边的筷⼦
} else { //奇数号哲学家
P(chopstick[i]); //请求左⼿边的筷⼦
P(chopstick[(i + 1) % 5]); //请求右⼿边的筷⼦
}
eat;
V(chopstick[(i + 1) % 5]); //放回右边筷⼦
V(chopstick[i]); //放回左边筷⼦
think;
}
}