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

与Ben Ari的频道一起吃饭时出现僵局?

魏景龙
2023-03-14

作为一种概括,每个哲学家都可能首先使用“他左边”的叉子,导致他们每个人都在等待另一个叉子被释放,而这是永远不可能发生的。

我是遗漏了什么,还是这个解决方案不完整?

在关于信号量的一章中,类似的情况也发生了,但作者提出了一种替代解决方案,可以缓解死锁场景。例如,可以添加一个限制,使一位哲学家首先在另一侧使用叉子,而其他哲学家则使用叉子,从而避免死锁。我认为这可能是一个可行的解决方案,但我想和这里的其他人确认一下。

提前谢谢!

共有1个答案

宇文梓
2023-03-14

我是遗漏了什么,还是这个解决方案不完整?

我肯定没有遗漏任何东西:我向在我大学教授这本书的教授证实,这种解决方案确实会导致僵局。

 类似资料:
  • 我正在寻找一种方法来解决用餐哲学家使用信号量的问题,我非常坚持我应该如何去做。我在下面包含了我的代码。 我在想,当一位哲学家用扫描电镜拿起筷子时。acquire()然后使用但我不确定这是否正确。它是? 编辑,这样我就实现了这个。这似乎有效,但我不确定。

  • 问题内容: 我正在尝试了解Go语言。我试图创建两个goroutine,使用两个通道将它们之间的流链接起来: 如预期的那样,此代码将输出: 直到主要功能退出。 但是,如果我将另一个值从main发送到其中一个通道,则会突然阻塞: 它输出 然后阻塞,直到主体结束。 发送给c1的值“ 2”到达第一个goroutie,后者将其发送给c2,但是第二个goroutine从不接收。 (在此示例中,使用大小为1(c

  • 我试图按照Rust文档中的示例进行操作。链接中的最终代码: 运行此命令将生成以下输出: 根据文献记载,哲学家应该能够同时吃饭。预期结果如下所示: 不幸的是,无论代码执行的频率有多高,这种情况都不会发生。 我目前正在Windows上使用,但问题也发生在生锈的操场上。你自己试试吧。

  • 在嵌入式TomEE容器中运行Arquillian测试时,我得到了以下错误

  • 我是一个初学者,我写了这个代码,但它似乎不起作用。我运行代码,框架不出现idk为什么。 我还有一个主要方法: (班级名称是匈牙利语不看)

  • 我试图解决哲学家进餐的问题,每次打印出来只有两个人在吃饭。我创建的每个线程都是一个哲学家,每个部分都是一个叉子,根据算法,每次我们派一个哲学家,我们都试图得到他的叉子(第一次是叉子1和叉子2),叉子是关键部分。你知道怎么解决这个问题吗?这是我的密码: 这就是主要问题: