有五个哲学家,他们的生活方式是交替的进行思考和进餐。哲学家们公用一张圆桌,分别坐在周围的五张椅子上。在圆桌上有5个碗和5支筷子。平时一个哲学家进行思考,饥饿时便试图取用其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐。进餐毕,放下筷子又继续思考。code
var chopstick:array[0……4] of semaphor资源
第i个哲学家的活动可买描述为it
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;当他们再试图拿起右边筷子时,都将无限期的等待。map
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;