哲学家就餐问题分析(含解决方案)
发布时间:2020-12-24 17:23 所属栏目:53 来源:网络整理
导读:假设有 5 个哲学家,他们的生活只是思考和吃饭。这些哲学家共用一个圆桌,每位都有一把椅子。在桌子中央有一碗米饭,在桌子上放着 5 根筷子(图 1 )。 图 1 就餐哲学家的情景 当一位哲学家思考时,他与其他同事不交流。时而,他会感到饥饿,并试图拿起与他相
假设有 5 个哲学家,他们的生活只是思考和吃饭。这些哲学家共用一个圆桌,每位都有一把椅子。在桌子中央有一碗米饭,在桌子上放着 5 根筷子(图 1 )。
semaphore chopstick[5]; 其中,chopstick 的所有元素都初始化为 1。哲学家 i 的结构如下所示:do { wait(chopstick[i]); wait(chopstick[(i+1) % 5]); /* eat for awhile */ signal(chopstick[i]); signal(chopstick[(i+1) % 5]); /* think for awhile */ } while (true);虽然这一解决方案保证两个邻居不能同时进食,但是它可能导致死锁,因此还是应被拒绝的。假若所有 5 个哲学家同时饥饿并拿起左边的筷子。所有筷子的信号量现在均为 0。当每个哲学家试图拿右边的筷子时,他会被永远推迟。 死锁问题有多种可能的补救措施:
(编辑:ASP站长网) |
相关内容
网友评论
推荐文章
热点阅读