显示标签为“学习点滴”的博文。显示所有博文
显示标签为“学习点滴”的博文。显示所有博文

2010年3月26日星期五

操作系统并发和互斥:哲学家进餐问题

在1971年,著名的计算机科学家艾兹格·迪科斯彻提出了一个同步问题,即假设有五台计算机都试图访问五份共享的磁带驱动器。稍后,这个问题被托尼·霍尔重新表述为哲学家就餐问题。这个问题可以用来解释死锁和资源耗尽。


问题描述



设有5个哲学家,共享一张放有5把椅子的桌子,每人分得一把椅子,但是,桌子上共有5只筷子,在每人两边各放一只,哲学家们在肚子饥饿时才试图分两次从两边拿起筷子就餐。

条件:

1)拿到两只筷子时哲学家才开始吃饭。

2)如果筷子已在他人手上,则该哲学家必须等他人吃完之后才能拿到筷子。

3)任一哲学家在自己未拿到两只筷子前却不放下自己手中的筷子。

试:

1)描述一 个保证不会出现两个邻座同时要求吃饭的通信算法。

2)描述一个即没有两个邻座同时吃饭,有没有饿死(永远拿不到筷子)的算法




哲学家就餐问题可以这样表述,假设有五位哲学家围坐在一张圆形餐桌旁,做以下两件事情之一:吃饭,或者思考。吃东西的时候,他们就停止思考,思考的时候也停止吃东西。餐桌中间有一大碗意大利面,每两个哲学家之间有一只餐叉。因为用一只餐叉很难吃到意大利面,所以假设哲学家必须用两只餐叉吃东西。他们只能使用自己左右手边的那两只餐叉。哲学家就餐问题有时也用米饭和筷子而不是意大利面和餐叉来描述,因为很明显,吃米饭必须用两根筷子。



哲学家就餐问题的演示哲学家从来不交谈,这就很危险,可能产生死锁,每个哲学家都拿着左手的餐叉,永远都在等右边的餐叉(或者相反)。