操作系统_哲学家进餐问题

目录

哲学家进餐问题

问题的提出

初步思考

进程资源共享关系和同步关系分析

问题的具体解决方案

第一搏

存在的问题?

第二搏


哲学家进餐问题

问题的提出

  • 5位哲学家围绕圆桌而坐,反复思考和进餐;
  • 但是只有5只碗和筷子,放置如图所示,只有当哲学家同时拿起碗边的2只筷子时,才能进餐;
  • 请用记录型信号量进行同步。

 

初步思考

1,考虑到程序的顺序执行,哲学家先拿起一根筷子,再拿起另一根筷子;

2,有一定的顺序性,比如特定位置的哲学家必须对应特定位置的筷子;

3,最多同时有两个哲学家同时进餐;

进程资源共享关系和同步关系分析

1,思考:

  • 几个进程?:5种哲学家进程(由于哲学家有特定的位置,所以每个进程需要特别标明);
  • 共享什么样的资源?:相邻的两位哲学家互斥地访问他们之间的筷子,所以有5个临界资源——特定位置的筷子;

问题的具体解决方案

第一搏

由于不同的哲学家进程只有编号不一样,所以,使用一个模板(每个进程都不同,只是内容基本一致);

实现了哲学家拿起筷子的顺序(先右手后左手),并且每个哲学家i对应特定的筷子;

存在的问题?

当5位哲学家同时进餐(5个进程并发,每当一位哲学家拿起右手的筷子,就发生进程切换),将会出现下图情形:

                    

这样每位哲学家都拿不到左手边的筷子,都进阻塞锁状态,于是形成了死锁。

第二搏

将最后一位哲学家拿筷子的顺序颠倒。

解释如何解决死锁:

1,哲学家进程0-4依次执行:

  • 当0-3号哲学家进程依次拿起了右手边的筷子,轮到哲学家进程4;
  • 由于哲学家4先拿左手边的筷子0,发现哲学家1已经占有了这根筷子,于是发生阻塞;
  • 这时0-2号哲学家拿到执行权时,都会由于左手边的筷子被占用,从而陷入阻塞状态;
  • 只剩哲学家3,由于哲学家4先拿左手边的筷子0被阻塞,于是右手边的筷子4是空闲的,正好哲学家3需要占有这个资源;
  • 哲学家3使用完筷子后,哲学家2便可获得筷子3的使用权,以此类推,不会出现死锁;

2,哲学家进程0-4乱序执行:

不失一般性,假定进程切换(拿到一根筷子后切换)的顺序为1、4、2、3、0

  • 哲学家1拿起手边的筷子1,哲学家4拿起手边的筷子0,哲学家2拿起手边的筷子2,哲学家3拿起手边的筷子3;
  • 哲学家0想要拿起手边的筷子0,然而哲学家4已经占有了筷子0,哲学家0陷入沉思(阻塞);
  • 哲学家1缺筷子2,哲学家2缺筷子3,所以当轮到哲学家2、3执行时,便会陷入阻塞;
  • 由于轮到哲学家0、1、2执行时,他们均会陷入阻塞;
  • 此时只有哲学家3和哲学家4同时竞争筷子4,因此必定有一位哲学家先得到筷子;
  • 最终得到筷子的哲学家进餐完毕后,便会释放左右手的筷子,另一个进餐便可以拿到想要的资源,以此类推,不会出现死锁;

这便是哲学家进餐问题的标准解答之一!

 

 

 

 

 

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值