【问题标题】:Real world example of Dining philosophers?餐饮哲学家的真实世界例子?
【发布时间】:2014-04-11 01:01:06
【问题描述】:

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

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

【问题讨论】:

    标签: concurrency synchronization dining-philosopher


    【解决方案1】:

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

    拓扑不完全是圆桌,但非常接近。想象一下桌上有 5 个帐户。在这个类比中,账户就是叉子。任何两个账户都可以参与交易。交易==哲学家。所以在这个例子中,交易(哲学家)不仅可以位于两个账户(分叉)之间的表格边缘,还可以位于横跨表格的一条线上,连接任意两个账户(分叉)。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2016-03-04
        • 1970-01-01
        • 1970-01-01
        • 2013-01-28
        • 2019-02-07
        • 1970-01-01
        • 1970-01-01
        • 2010-10-26
        • 1970-01-01
        相关资源
        最近更新 更多