问答题 著名的“哲学家就餐问题”是指:五位哲学家围圆桌就座,桌上每二人之间放一根筷子,任一位哲学家修学中饿了便可且只能拿起左右两边的筷子吃饭,餐后将两根筷子各放回原处,自己也继续做学问,如此往复,即对哲学家Pi(i=0,1,2,3,4)有循环进程Si:
Pi做学问;
Pi取左手的i号筷子和右手的(i+1)rood 5号筷子;
Pi就餐;
Pi将两根筷子分放回原处;
哲学家就餐问题是这样5个进程组成的系统。

问答题 请说明此系统是个会死锁的系统。
【正确答案】死锁容易发生在进程获得一部分资源后继续申请其余资源时。当五位哲学家同时饿了,同时取左手的筷子并占有这一资源后,再同时申请右手的筷子,发现已无可用资源,此时五位哲学家都不会主动释放手中的资源,因此死锁。
【答案解析】
问答题 请分别用死锁预防、死锁避免、死锁检测与恢复改造系统。
【正确答案】死锁预防破坏四个必要条件(其中互斥条件无法破坏),首先破坏占有等待条件:每位拿筷子时必须左右筷子同时申请(资源预分配法),若缺一则不可获得资源分配。破坏非剥夺条件:第i位拿筷子时,若左右邻居中有等待者,则可强行抢夺资源。破坏循环等待:对5根筷子顺序编号,即1、2、3、4、5,每位只能按由小到大的顺序申请(资源顺序分配法)。
死锁避免:每位申请时,先看分配后是否会发生死锁,若不会则分配,否则拒绝分配。如最易发生死锁的情况:已有四位拿到左手的筷子,此时第五位申请左手的筷子,不可分配。
死锁检测与恢复:允许发生死锁,定期检测,若已发生死锁,则剥夺其中一位的资源分配给其他人。
【答案解析】
问答题 将上述情况之一编写程序。
【正确答案】下面将资源顺序分配法在这里简单地实现一下:
5根筷子顺序编号为0、1、2、3、4;定义信号量组chopstick[5]分别表示这5个资源,初值均为1。
哲学家P0~P3都是先从左手取,再从右手取:只有P4是先从右手取再从左手取。
P0~P3:
p(chopstick[i]);
P(chopstiek[i+1]);
吃饭;
V(chopstick[i]);
V(chopstick[i+1]);
p4:
p(chopstick[0]);
p(chopsticK[4]);
吃饭;
V(chopstick[0]);
V(chopstick[4]);
【答案解析】