《现代操作系统》中关于哲学家就餐的一个疑问?
图中被红线圈出来的那句“每个哲学家一个信号量”我不是很理解。这里,信号量的作用是什么?
还有一个不理解的地方就是:不是有5双筷子吗?为什么不是定义5个mutex?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
图中被红线圈出来的那句“每个哲学家一个信号量”我不是很理解。这里,信号量的作用是什么?
还有一个不理解的地方就是:不是有5双筷子吗?为什么不是定义5个mutex?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
1.信号量就是一个可以用来被锁住的东西,就是一个标识,比如说一个班里面谁拥有"3道杠"这个袖标谁就是大队长,这个例子里谁拥有这个信号量谁就可以吃饭
2.为什么不定义5个mutex,那一个班可以有5个大队长么?本例子中的袖标就是吃饭的碗,且假设一个碗只能一个人吃,如果5个人5个mutex,那大家就可以各吃各饭,互不影响.程序最怕无序的状态,为了有序,我们就引入信号量.
mutex可以看作计数为一的信号,实际这里换成5个mutex是没问题的,因为每个哲学家的信号量不会超过一。
我要拿筷子吃东西,我先把自己的状态成饥饿,然后看我左右两边的人是不是在吃,修改状态有一个mutex保护,所以不会有问题。
如果他们没在吃,那我就可以拿筷子,我拿筷子的时候,信号量up,拿到筷子之后信号量down,不用等待。
如果他们其中有人在吃,那我不能拿筷子,这时我直接信号量down,也就堵塞等待。
那谁通知我可以解除堵塞呢,就是我旁边两个拿了筷子的人。他们其中一个放下我要筷子的时候,看到我是饥饿的,而且我两边的人都没在吃了,就up了一下我的信号量,那刚才堵塞的down就会解除,我就可以重新尝试拿筷子了。
可以看出,这里的信号量起到了通知、等待的作用。
也就是说这5个信号量并不是用来保护或表示筷子的。