Producer/Consumer和Reader/Writer很容易想到,但是餐饮哲学家呢?在什么样的情况下,N个进程和N个资源将处于环状拓扑结构并相互交错?我可以想象N个进程竞争M个资源,但在这种情况下,每个进程可以使用任意两个资源。
wiki说,Dijkstra用它来模拟计算机对磁带驱动器外围设备的竞争。这种情况在现代还存在吗?
发布于 2014-05-21 05:35:28
我发现在两个帐户之间执行事务的问题与进餐哲学家的问题非常相似。要执行事务,线程必须锁定两个帐户,以确保从一个帐户借记正确的值(首先确保有可用资金),并记入另一个帐户的贷方。
拓扑不完全是圆桌,但非常接近。想象一下表中有5个账户。在这个比喻中,账户就是叉子。任何两个帐户都可以参与交易。Transactions ==哲学家。因此,在本例中,事务(哲学家)不仅可以位于两个帐户(分支)之间的表的边缘,还可以位于连接任意两个帐户(分支)的横切表的线上。
发布于 2014-04-22 20:39:20
餐饮哲学家和其他类似“问题”的主要目的不是描述现实世界的场景,而是为流程交互提供一个干净、抽象、甚至简化的规范,一方面可以用作教学示例,另一方面可以作为真实软件的构建块。
具体地说,餐饮哲学家是一个很好的例子,它展示了活锁和死锁是如何发生的。
至于现实世界的情况,我不知道磁带驱动器,但我可以想象一个火箭制导系统,其中火箭的机翼是“叉子”,而“哲学家”是控制一对机翼来操纵火箭的过程。您甚至不需要对通常的图示进行过多修改即可切换到此解释:)
https://stackoverflow.com/questions/22257580
复制相似问题