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