【正确答案】
【答案解析】对8位哲学家顺序编号为:P
1
,P
2
,P
3
,P
4
,P
5
,P
6
,P
7
,P
8
,对8个叉子顺序编号为:1,2,3,4,5,6,7,8。讨论每个哲学家的行为过程,再总结出规律,发现下标为奇数的哲学家是先拿左边的叉子,再拿右边的叉子;下标为偶数的哲学家先拿右边的叉子,再拿左边的叉子。由此得到以下程序,信号量S[i]的初值均为1。又因为编号P
8
的哲学家拿起的是8号和1号叉子,因此用取余运算令其返回1。
if(i%2==0) {
P(S[i]);
P(S[(i+1)%8]);
吃;
V(S[i]);
V(S[(i+1)%8]);
}
else {
P(S[i+1]);
P(S[i]);
吃;
V(S[i+1]);
V(S[i]);
}
该题不可能死锁。死锁产生的条件是所有的哲学家都从同一边拿起叉子,导致每个进程占用一个资源(叉子)而等待另一个资源,但该题的取叉子方式避免了这一现象。