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