《现代操作系统》中关于哲学家就餐的一个疑问?

图片描述
图中被红线圈出来的那句“每个哲学家一个信号量”我不是很理解。这里,信号量的作用是什么?
还有一个不理解的地方就是:不是有5双筷子吗?为什么不是定义5个mutex?

阅读 3.8k
2 个回答

1.信号量就是一个可以用来被锁住的东西,就是一个标识,比如说一个班里面谁拥有"3道杠"这个袖标谁就是大队长,这个例子里谁拥有这个信号量谁就可以吃饭

2.为什么不定义5个mutex,那一个班可以有5个大队长么?本例子中的袖标就是吃饭的碗,且假设一个碗只能一个人吃,如果5个人5个mutex,那大家就可以各吃各饭,互不影响.程序最怕无序的状态,为了有序,我们就引入信号量.

mutex可以看作计数为一的信号,实际这里换成5个mutex是没问题的,因为每个哲学家的信号量不会超过一。

我要拿筷子吃东西,我先把自己的状态成饥饿,然后看我左右两边的人是不是在吃,修改状态有一个mutex保护,所以不会有问题。

如果他们没在吃,那我就可以拿筷子,我拿筷子的时候,信号量up,拿到筷子之后信号量down,不用等待。

如果他们其中有人在吃,那我不能拿筷子,这时我直接信号量down,也就堵塞等待。

那谁通知我可以解除堵塞呢,就是我旁边两个拿了筷子的人。他们其中一个放下我要筷子的时候,看到我是饥饿的,而且我两边的人都没在吃了,就up了一下我的信号量,那刚才堵塞的down就会解除,我就可以重新尝试拿筷子了。

可以看出,这里的信号量起到了通知、等待的作用。

也就是说这5个信号量并不是用来保护或表示筷子的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题