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

现实世界中哲学家就餐的例子?

汤枫
2023-03-14

生产者/消费者和读者/作家很容易想到,但是餐饮哲学家呢?在什么样的情况下,N个进程和N个资源会躺在环形拓扑上并相互交错?我可以想到N个进程竞争M个资源,但是在这种情况下,每个进程可以使用任何两个资源。

维基说Dijkstra用它来模拟竞争磁带驱动器外围设备的计算机。这种情况在现代还存在吗?

共有2个答案

米俊晤
2023-03-14

餐饮哲学家和其他类似“问题”的主要目的不是描述现实世界的场景,而是给出一个干净、抽象、甚至简化的过程交互规范,一方面可以用作教学示例,另一方面可以用作真实软件的构建块另一只手。

具体来说,哲学家进餐是一个很好的例子,可以说明活锁和死锁是如何发生的。

至于一个真实的场景,我不知道磁带机,但我可以想象一个火箭制导系统,其中火箭机翼是“叉子”,而“哲学家”是控制成对机翼操纵火箭的过程。您甚至不必修改通常的图示,就可以切换到以下解释:)

查飞星
2023-03-14

我发现在两个帐户之间执行事务的问题与问题非常相似。要执行交易,线程必须锁定两个帐户,以确保从一个帐户借记正确的值(首先确保有可用资金),然后贷记到另一个帐户。

拓扑结构并不完全是圆桌会议,但非常接近。想象一下桌上有5个账户。在这个类比中,账目就是叉子。任何两个帐户都可以参与一项交易。事务==哲学家。因此,在本例中,事务(哲学家)不仅可以位于两个帐户(叉)之间的表边缘,还可以位于横穿表的一条线上,连接任意两个帐户(叉)。

 类似资料:
  • 我试图在netlogo中实现一个拍卖概念——它类似于餐饮哲学家问题程序。 我的程序处理与用餐哲学家程序中的哲学家和叉子相对应的计算机和处理器。在哲学家程序中,用户需要两把叉子才能吃饭,但在计算机和处理器中,一台计算机需要一个处理器才能工作。 我的程序中定义的状态是:,,,对应于哲学家程序中的,,。 目前,我的程序将所有计算机的状态更改为。我有问题在获取服务器的计算机。 代码片段是-

  • 本文向大家介绍餐饮哲学家问题(DPP),包括了餐饮哲学家问题(DPP)的使用技巧和注意事项,需要的朋友参考一下 餐饮哲学家的问题指出,有5位哲学家共享一张圆桌,他们交替吃饭和思考。每个哲学家都有一碗饭和5根筷子。哲学家需要左右筷子才能吃饭。饿了的哲学家只有在两把筷子都齐备的情况下才可以吃东西,否则哲学家放下筷子,重新开始思考。 餐饮哲学家是一个经典的同步问题,因为它演示了一大类并发控制问题。 餐饮

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

  • 我的Java代码中有一个问题,它应该模拟pholosophers问题,如下所述:http://en.wikipedia.org/wiki/Dining_philosophers_problem我想输出所有哲学家的当前状态,每次他们中的一个吃饭或思考。输出应该是这样的:“OxOx(2)”,其中“X”表示哲学家在吃,“O”表示他在思考,“O”表示他在等筷子。括号中的数字表示状态已更改的哲学家的编号。我

  • 我想用java信号量解决用餐哲学家的问题,但我被卡住了。最高ID的筷子应该是可用的,但它似乎总是采取,我不知道为什么。谁能告诉我我错在哪里了? Fork类: 哲学家班: 主要内容:

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