admin管理员组文章数量:1026989
一.问题描述
- 一个圆桌上坐着5名哲学家,每两个哲学家中间放着一根筷子,桌子中间放着一碗米饭。
- 只有当哲学家饥饿时,才会试图拿起左右两只筷子
- 如果筷子已经在他人的手里,则需等待
- 哲学家只有同时拿起两根筷子才能开始进餐
- 进餐完毕后,放下筷子继续思考
- 也就是进程需要同时持有两个临界资源才能开始工作
二.问题分析
-
相邻的哲学家对他们中间筷子的访问是互斥的
-
进程需要同时持有两个临界资源才能开始工作,那么最核心的问题就是资源分配不当造成的死锁现象
-
信号量设置:定义互斥信号量数组chopstick[5]={1,1,1,1,1}用于实现对五个筷子的互斥访问,并对哲学家按0~4编号,哲学家 i 左边的筷子编号为 i ,右边筷子的编号为(i+1)%5
避免死锁的方法: -
(1)最多允许四个哲学家同时进餐,这样可以保证至少有一个哲学家是拿到左右两只筷子的
-
(2)使各哲学家拿筷子这件事互斥的进行
-
比如0号哲学家此时先开始吃饭,他会先对互斥信号量mutex进行P操作,再分别拿起左、右两双筷子,然后对互斥信号量执行V操作将其释放
-
此时如果1号哲学家也想要开始吃饭,那么他会先执行P(mutex),然后当他想要拿起自己左边的筷子时,由于此时1号筷子被0号哲学家占用,那么1号哲学家进程会暂时阻塞在这里
-
如果此时有别的哲学家也想要开始吃饭,那么将他执行到P(mutex)时,由于1号哲学家此时还没有对互斥信号量mutex执行V操作,那么他是不能进行拿筷子这个操作的
-
也就是说即使一个哲学家只拿了一只筷子被阻塞,也不会有别的哲学家继续尝试拿筷子或者等待筷子被释放,那么就不会产生死锁现象
一.问题描述
- 一个圆桌上坐着5名哲学家,每两个哲学家中间放着一根筷子,桌子中间放着一碗米饭。
- 只有当哲学家饥饿时,才会试图拿起左右两只筷子
- 如果筷子已经在他人的手里,则需等待
- 哲学家只有同时拿起两根筷子才能开始进餐
- 进餐完毕后,放下筷子继续思考
- 也就是进程需要同时持有两个临界资源才能开始工作
二.问题分析
-
相邻的哲学家对他们中间筷子的访问是互斥的
-
进程需要同时持有两个临界资源才能开始工作,那么最核心的问题就是资源分配不当造成的死锁现象
-
信号量设置:定义互斥信号量数组chopstick[5]={1,1,1,1,1}用于实现对五个筷子的互斥访问,并对哲学家按0~4编号,哲学家 i 左边的筷子编号为 i ,右边筷子的编号为(i+1)%5
避免死锁的方法: -
(1)最多允许四个哲学家同时进餐,这样可以保证至少有一个哲学家是拿到左右两只筷子的
-
(2)使各哲学家拿筷子这件事互斥的进行
-
比如0号哲学家此时先开始吃饭,他会先对互斥信号量mutex进行P操作,再分别拿起左、右两双筷子,然后对互斥信号量执行V操作将其释放
-
此时如果1号哲学家也想要开始吃饭,那么他会先执行P(mutex),然后当他想要拿起自己左边的筷子时,由于此时1号筷子被0号哲学家占用,那么1号哲学家进程会暂时阻塞在这里
-
如果此时有别的哲学家也想要开始吃饭,那么将他执行到P(mutex)时,由于1号哲学家此时还没有对互斥信号量mutex执行V操作,那么他是不能进行拿筷子这个操作的
-
也就是说即使一个哲学家只拿了一只筷子被阻塞,也不会有别的哲学家继续尝试拿筷子或者等待筷子被释放,那么就不会产生死锁现象
版权声明:本文标题:计算机操作系统学习之哲学家进餐问题 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/jiaocheng/1727375505a737236.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论