当前位置: 首页 > 知识库问答 >
问题:

为什么左/右序列在哲学家晚宴的指挥解决方案中很重要?

孟子墨
2023-03-14

所描述的哲学家晚餐问题的导体解决方案建议使用大小为4的符号,并且所有哲学家都试图先得到左叉,再得到右叉。http://en.wikipedia.org/wiki/Dining_philosophers_problem#Conductor_solution

它还表明哲学家们是按左/右顺序拿起叉子的?

为什么哲学家按左/右顺序拿起叉子很重要?

或者都在同一个序列中(我猜它们也可以是右/左)?

共有2个答案

戚俊美
2023-03-14

首先,它说所有哲学家的顺序必须是左/右或右/左。

这一切都取决于附加的微妙假设。我认为,在问题的“导体解决方案”中,如果我们假设服务员足够聪明,那么左/右顺序并不重要。如果服务员知道整个餐桌的情况,他可以以“保守”的方式分配叉子,这样僵局就不会发生——这将是一个集中的解决方案。固定的顺序有助于指挥者决定是否可以授予叉子,因为哲学家的行为方式更容易预测。

仰钧
2023-03-14

死锁通常发生在锁出现订单问题时,例如:

Thread 1: acquire lock1 then lock2
Thread 2: acquire lock2 then lock1

如果T1设法同时获取锁1和T2以获取锁2,则它们都会被阻止,并且您会遇到死锁。

通过引入一个特定的顺序,例如:lock1必须始终在lock2之前获取,您就可以解决以下问题:

Thread 1: acquire lock1 then lock2
Thread 2: acquire lock1 then lock2

一旦T1获得lock1,T2就无法取得进展并获得lock2,这对T1仍然可用。

采用先左后右的顺序实现了相同的目标,并简化了指挥的角色。

 类似资料:
  • 哲学家晚餐问题的指挥解决方案建议使用四码的信号,所有哲学家都试图在右叉之前得到左叉。http://en.wikipedia.org/wiki/Dining_philosophers_problem#Conductor_solution 信号量应该用于访问左fork和访问右fork的每个人吗? 如果一个哲学家能在规定的时间内得到左叉子,但没有得到右叉子,他该怎么办?他们应该把左叉子还给我吗? 哲学家

  • 根据这篇维基百科文章中的钱迪/米斯拉部分,我们有5位哲学家,编号为P1-P5。 根据这句话: 对于每一对争夺资源的哲学家,创建一个叉子,并将其交给具有较低ID的哲学家(n代表代理Pn)。每个叉子可以是脏的或干净的。最初所有的叉子都是脏的 当一个有叉子的哲学家收到一个请求消息时,如果叉子是干净的,他会保留它,但是如果叉子是脏的,他会放弃它。如果他把叉子送过去,他会先把叉子清理干净。 因此,如果知道所

  • 我已经完成了解决方案。因为在某个时间点,典型的监视器实现会导致饥饿。我已经阅读了这里给出的用餐哲学家问题的“礼貌”版本 那么,如果两个相邻的哲学家同时感到饥饿呢。因为测试(i)是检查它的左派和右派哲学家是否饿了。如果它发现它的邻居也饿了。这是一种僵局,对吗?我的意思是他们两个都不能吃东西,因为他们附近的哲学家家饿了,对吧?

  • 我是这里的初学者,这个代码在理论上应该是可行的,为你们这些很棒的家伙们帮我干杯! 13195的质因数是5、7、13、29。 600851475143的最大质因数是什么? 欧拉问题3

  • 定律1:我们知道,在任何一张左撇子和右撇子哲学家混合的桌子上,僵局都不会发生。我非常熟悉它的证明。 最近我在采访中遇到了以下问题。 有五位哲学家坐在圆桌旁。两个筷子之间各有一个哲学家。每个哲学家都需要两支筷子吃饭。我们有两种哲学家:左撇子和右撇子。左手先用左手拿筷子。右手先用右手拿筷子。假设五位哲学家中至少有一位左撇子和一位右撇子。以下哪一项是正确的: a) 独立于圆桌会议上的哲学家组合,没有僵局

  • 今天,我决定尝试解决哲学家吃饭的问题。所以我写下面的代码。但我认为这是不正确的,所以如果有人告诉我这是怎么回事,我会很高兴的。我使用fork作为锁(我只读取它们,因为我不把对它们的访问放在同步块中),我有一个扩展线程的类,它保留了它的两个锁。 我认为有些不对劲,因为第五位哲学家从不吃饭,第四位和第三位哲学家大多吃饭。提前感谢。