鱼C论坛

 找回密码
 立即注册
查看: 1051|回复: 4

[已解决]操作系统实验题,我是真的不会了,请教各位大神

[复制链接]
发表于 2020-6-17 19:28:02 | 显示全部楼层 |阅读模式
60鱼币
如题:
在Windows环境下,使用C++/C语言和记录型信号量实现以下进程同步互斥问题:有4位哲学家围坐在一张圆桌边,每位哲学家交替地就餐和思考。在圆桌中心有2个碗,每两位哲学家之间有1 根筷子。每位哲学家必须拿到一个碗和两侧的筷子之后,才能就餐,进餐完毕,将碗和筷子放回原位,并继续思考。
最佳答案
2020-6-17 19:28:03
哲学家就餐这种问题,设计一套合理的就餐顺序,然后严格按照这个顺序执行就可以。
每一个餐具,就用一把锁代替。
每一个哲学家需要两根筷子,就意味着,需要同时持有两把锁。
因此,就需要避免死锁。比如,假设所有人围城一个近似为圆的形状,可以按照顺时针或者逆时针的方向加锁。

进一步,假设哲学家1,2两个人的位置关系为
筷子1,哲学家1,筷子2,哲学家2,筷子3
按照时间顺序发生了
1. 哲学家2 拿起筷子2 (成功)
2. 哲学家2 拿起筷子3 (成功)
3. 哲学家1 拿起筷子1 (成功)
4. 哲学家1 拿起筷子2 (失败),因为筷子2被哲学家2持有着。
此时,哲学家1,应该放弃对筷子1的持有(在代码中就是 while 循环不断重试 ),否则就会造成循环等待,死锁。

最佳答案

查看完整内容

哲学家就餐这种问题,设计一套合理的就餐顺序,然后严格按照这个顺序执行就可以。 每一个餐具,就用一把锁代替。 每一个哲学家需要两根筷子,就意味着,需要同时持有两把锁。 因此,就需要避免死锁。比如,假设所有人围城一个近似为圆的形状,可以按照顺时针或者逆时针的方向加锁。 进一步,假设哲学家1,2两个人的位置关系为 筷子1,哲学家1,筷子2,哲学家2,筷子3 按照时间顺序发生了 1. 哲学家2 拿起筷子2 (成功) 2 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-17 19:28:03 | 显示全部楼层    本楼为最佳答案   
哲学家就餐这种问题,设计一套合理的就餐顺序,然后严格按照这个顺序执行就可以。
每一个餐具,就用一把锁代替。
每一个哲学家需要两根筷子,就意味着,需要同时持有两把锁。
因此,就需要避免死锁。比如,假设所有人围城一个近似为圆的形状,可以按照顺时针或者逆时针的方向加锁。

进一步,假设哲学家1,2两个人的位置关系为
筷子1,哲学家1,筷子2,哲学家2,筷子3
按照时间顺序发生了
1. 哲学家2 拿起筷子2 (成功)
2. 哲学家2 拿起筷子3 (成功)
3. 哲学家1 拿起筷子1 (成功)
4. 哲学家1 拿起筷子2 (失败),因为筷子2被哲学家2持有着。
此时,哲学家1,应该放弃对筷子1的持有(在代码中就是 while 循环不断重试 ),否则就会造成循环等待,死锁。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-17 21:57:39 | 显示全部楼层
赚小钱 发表于 2020-6-17 21:52
哲学家就餐这种问题,设计一套合理的就餐顺序,然后严格按照这个顺序执行就可以。
每一个餐具,就用一把 ...

忘记说碗了。
与筷子一样,每一个碗,都可以被抽象为一把锁资源。
在加锁的时候,需要保证,要么先获取碗,后获取筷子;或者,要么先获取筷子,后获取碗。
否则,一旦加锁的顺序不固定,同样会死锁。

在使用完所有锁之后,释放锁的顺序,一般情况,应该与加锁的顺序相反(虽然顺序一致,在某些情况可能没问题)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-18 04:52:37 | 显示全部楼层
赚小钱 发表于 2020-6-17 21:57
忘记说碗了。
与筷子一样,每一个碗,都可以被抽象为一把锁资源。
在加锁的时候,需要保证,要么先获取 ...

大佬能帮忙看看我的题吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-18 12:17:45 | 显示全部楼层
linkz 发表于 2020-6-18 04:52
大佬能帮忙看看我的题吗

上面说的不就是你的题吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 15:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表