题目
请写出最多允许4人同时进餐的哲学家进餐问题的算法(视频中的代码有点错误)
答案
代码
Var chopstick:array[0,…,4],limit : semaphore:=1,1,1,1,1,4; //limit信号量表示最多允许同时吃饭的人数
begin
parbegin
p1; p2; p3; p4; p5;
parend
end
//第i位哲学家的活动可描述为:
pi:
begin
repeat
Wait(limit);
Wait(chopstick[i]);
Wait(chopstick[(i+1) mod 5]);
Eat;
Signal(chopstick[i]);
Signal(chopstick[(i+1) mod 5]);
Signal(limit);//注意:吃完了才把limit+1
Think;
until false
end