餐饮哲学家的真实例子?

Ray*_* Wu 5 concurrency synchronization dining-philosopher

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

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

How*_*ant 6

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

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


xxa*_*xxa 2

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

具体来说,哲学家就餐是一个很好的例子,展示了活锁和死锁是如何发生的。

至于现实世界的场景,我不知道磁带驱动器,但我可以想象一个火箭制导系统,其中火箭翼是“叉子”,“哲学家”是控制一对翼以引导火箭的过程。您甚至不必对通常的图示进行太多修改即可切换到此解释:)