哲学家就餐问题分析(含解决方案)
|
假设有 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。当每个哲学家试图拿右边的筷子时,他会被永远推迟。死锁问题有多种可能的补救措施:
(编辑:海洋资讯信息网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


