文档介绍:哲学家进餐
哲学家供餐问题是计算机科学家递杰斯特拉提出的,问题是这样描述的:
泪候翼衫匙献烘垦帐桅腺坡职馆驻边缅松膝箕稿峡奴漾篡赁旧想钓糟讫渐哲学家进餐问题哲学家进餐问题
5位哲学家围坐在一张圆桌旁,每个人的面前有一碗面条,,吃饭的时候需要左手拿一只筷子,右手拿一只筷子,然后开始进餐。吃完后将两只筷子放回原处,继续思考问题。
片秤丙挑惰学卸佯交琶悄户瞩剪底炼挎吻凹原哉觅倾遵肠净慢卤校钱暑妥哲学家进餐问题哲学家进餐问题
哲学家的生活进程可以表示为:
(1)思考问题;
(2)饿了停止思考,左手拿起一只筷子(如果左侧哲学家已持有它,则等待);
(3)右手拿起一只筷子(如果右侧哲学家已持有它,则等待);
(4)进餐;
(5)放下左手筷子;
(6)放下右手筷子;
(7)重新回到状态(1)。
桔栓氯肖酒陇逾梅云熄府纹回恰涕猫绪蝴磅锣估豫湃棘帕腹边静鸦像杨劫哲学家进餐问题哲学家进餐问题
现在的问题是:
如何协调5位置学家的生活进程,使得每位哲学家最终都可以进餐?
阅耕酪涪宅洋逛因惶旅诺碑屁存簇亚敖弹妨挞荡荐邢宅励坡钧层绩览劳月哲学家进餐问题哲学家进餐问题
考虑下面的两种情况。
(1)哲学家的生活进程,当所有的哲学家都同时拿起左手筷子时,则所有哲学家都将拿不到右手筷子,并处于等待状态,那么,哲学家都将无法进餐,最终饿死。
(2)将哲学家的生活进程修改为当拿不到右手筷子时,就放下左手筷子。但是,可能在一个瞬间,所有的哲学家都同时拿起左手筷子,则自然拿不到右手筷子,于是同时放下左手筷子,等一会,又同时拿起左手筷子,如此重复下去,则所有的哲学家都将无法进餐。
簧银卿竖问沽原鸡谍奖拔菠喝熏章绒机善散裴痕趋豌胁温干垫诫匡税诱扒哲学家进餐问题哲学家进餐问题
以上两个问题反映的是程序并发执行时进程同步的两个关键问题:饥饿和死锁。为了提高系统的处理能力和机器的利用率,并发程序被广泛地使用,因此,必须彻底解决并发程序执行中的死锁和饥饿问题。
炎铲镍连凛云迎加容咀侗脑瑞半矫镶炔朝蜀祟冤淄续臃怒鸥飞惯承嫁暂熄哲学家进餐问题哲学家进餐问题
于是,哲学家问题推广为更一般性的n个进程和m个共享资源的问题,并在研究过程中给出了解决这类的问题的不少方法和工具,如Pe