【问题标题】:Dining Philosophers problem - A Clarification needed餐饮哲学家问题 - 需要澄清
【发布时间】:2010-10-26 01:43:00
【问题描述】:

最近我读到 this Wikipedia article 关于餐饮哲学家的问题,但我不清楚 Chandy / Misra 的解决方案。

根据文章,“当一个有叉子的哲学家收到请求消息时,如果叉子是干净的,他会保留叉子,如果叉子脏了就放弃。”在这个问题的上下文中,如果他正在吃东西,他会通过它,如果他还没有开始吃东西,他会保留它。

根据场景,Dirty是什么意思?线程正在运行还是已经退出?

【问题讨论】:

  • 我猜这意味着它已经完成了运行。或者哲学家已经吃完了自己的饭,因此叉子很脏。

标签: multithreading concurrency dining-philosopher


【解决方案1】:

Dirty 似乎意味着“空闲”或“可用”,而 clean 意味着“必须请求它”或“抢占它”。

它说如果他捡起一个叉子是“脏的”(当他想要叉子时没有争用它),如果他必须请求它,它说它是“干净的”,并且它的初始状态是脏的。

  • 拿起一个可用的叉子 => 叉子脏了 => 清理它并在询问时放弃它。

  • 没有可用的叉子 => 必须要求它 => 将收到它清理。

这让我想起了名为 Don't Interrupt an Interrupt 的组织模式。

【讨论】:

    【解决方案2】:

    脏意味着处理已经开始,因此可以中断。

    只有当你有两个分叉时,你才能处理。

    【讨论】:

    • 脏也意味着“处理尚未开始(或已经完成),因此它可以立即可用,而无需为此中断其他人。”
    • 这就是为什么所有的分叉开始和结束都是脏的。如果他们开始干净,没有人会使用它们。
    • 唯一一次干净的叉子是在它从一位哲学家传给另一位哲学家的那一刻。重要的不是它是否干净(因为它实际上从来都不是干净的),而是当您收到它时它是否是干净的:即它是否空闲/可用并且您是否能够挑选它up(脏),或者它是否很忙并且您必须请求它并接收它(已清理)。
    猜你喜欢
    • 2016-03-04
    • 2019-02-07
    • 1970-01-01
    • 2010-10-11
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多