有五个哲学家,他们的生活方式是交替的进行思考和进餐。哲学家们公用一张圆桌,分别坐在周围的五张椅子上。在圆桌上有5个碗和5支筷子。平时一个哲学家进行思考,饥饿时便试图取用其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐。进餐毕,放下筷子又继续思考。
var chopstick:array[0……4] of semaphor
第i个哲学家的活动可买描述为
repeat
wait(chopstick[i]); //拿起左边筷子
wait(chopstick[(i+1) mod 5]); //拿起右边筷子
...eat...
singal(chopctick[i]); //释放左边筷子
singal(chopstick[(i+1) mod 5]); //释放右边筷子
...
think;
until false;
假如5个哲学家同时饥饿而各自拿起左边的筷子,会使5个信号量均为0;当他们再试图拿起右边筷子时,都将无限期的等待。
var chopstick:
array[0...4] of semaphore := (1,1,1,1,1)
具体过程:
repeat
think;
Swait(chopstick[(i+1) mod 5],chopstick[i]);
eat
SSingal(chopstick[(i+1) mod 5],chopctick[i]);
think;
until false;
(adsbygoogle = window.adsbygoogle || []).push({});