homework-4 Version 0 |
|
👤 Author: by 1798570839qqcom 2019-10-07 07:16:27 |
问题演示:
在一个圆桌旁坐着五位哲学家,每两位哲学家之间有一根筷子,一共五把。哲学家们认为,当他们饿了的时候,他们会拿起两面的筷子吃饭。只有拿了两根筷子,他们才能开始进食。显然,如果一个哲学家想吃东西,如果他的任何邻居都在吃东西,他就不能吃东西,而且筷子不够用(一根筷子还是没有一根筷子)。
解:
无效的哲学家(i)
{
而(真)
{
P(筷子[i]);
P(筷子[(i + 1)%5]);
吃();
V(筷子[i]);
V(筷子[(i + 1)%5]);
认为();
}
}
我代表第i个哲学家(0、1、2、3、4、5)。该程序的核心思想是使用PV操作让哲学家等到左右两侧的筷子可以自由再次开始进食,然后在进食后将筷子放回原处。
问题:上述解决方案有一个缺点:当所有哲学家都想同时就餐时,就会发生僵局并永远等待(饥饿)。