|
要求:有5个哲学家坐在一个圆桌上。食物摆在桌子中间,桌子上总共有5把叉子,每个哲学家的左右手各有一把。因为吃饭时,哲学家需要同时使用左手和右手的叉子,所以哲学家必须和他左边和右边的哲学家共享叉子。在这个实验中,假定哲学家每次吃饭的时间长度为单位1,吃完一次后则放下两把叉子。如果等待10个单位时间长度之后,哲学家仍没有得到叉子吃饭,则被饿死。你需要设计一种方法使得任何一个哲学家都不被饿死。
有关内容:VxWorks信号量、定时器和消息队列的程序设计,并通过实验了解资源冲突的原因和解决方法。
相关提示:?
需要考虑的问题:死锁!!!当每个哲学家同时拿到左手的叉子时,同时,每个人又在等待右手的叉子。然而,没有哲学家会放下手中的叉子,所以永远没有人能够开始吃饭。这种情况就会产生死锁并导致永远循环等待。
? 为了解决这个问题,你需要使用二进制信号量。为每个叉子创建一个信号量。拿到叉子可以通过调用semTake()来实现,放下叉子可以通过调用semGive()来实现。
? 避免出现死锁,在死锁即将发生前解除死锁。
? 通过定时器判断哲学家是否被饿死。
? 通过WindView来对程序运行结果进行分析。
恳请大家给一点提示。谢谢
|
|