生产者/消费者和读者/作家很容易想到,但餐饮哲学家呢?N个进程和N个资源在什么样的情况下会在环形拓扑上相互交错?我可以想到 N 进程竞争 M 资源,但在这种情况下,每个进程可以使用任意两种资源。
wiki说 Dijkstra 用它来模拟计算机竞争磁带驱动器外围设备。这种情况在现代还存在吗?
生产者/消费者和读者/作家很容易想到,但餐饮哲学家呢?N个进程和N个资源在什么样的情况下会在环形拓扑上相互交错?我可以想到 N 进程竞争 M 资源,但在这种情况下,每个进程可以使用任意两种资源。
wiki说 Dijkstra 用它来模拟计算机竞争磁带驱动器外围设备。这种情况在现代还存在吗?
我发现在两个账户之间执行交易的问题与哲学家进餐问题非常相似。要执行交易,线程必须锁定两个账户,以确保从一个账户中借记正确的值(首先确保有可用资金)并记入另一个账户。
拓扑不完全是圆桌,但非常接近。想象一下桌上有 5 个账户。在这个类比中,账户就是叉子。任何两个账户都可以参与交易。交易==哲学家。所以在这个例子中,交易(哲学家)不仅可以位于两个账户(分叉)之间的表格边缘,还可以位于横跨表格的一条线上,连接任意两个账户(分叉)。
哲学家就餐和其他类似“问题”的主要目的不是描述现实世界的场景,而是为流程交互提供一个清晰、抽象、甚至简化的规范,一方面可以用作教学示例,也可以作为构建模块另一方面,真正的软件。
具体来说,就餐哲学家是一个很好的例子,展示了活锁和死锁是如何发生的。
至于现实世界的场景,我不知道磁带驱动器,但我可以想象一个火箭引导系统,其中火箭机翼是“叉子”,而“哲学家”是控制一对机翼以引导火箭的过程。您甚至不必修改通常的插图就可以切换到这个解释:)