为什么要有五个餐饮哲学家?


18

我想知道为什么餐饮哲学家问题是基于五个哲学家的案例。为什么不四个?

我猜想我们在讨论五位哲学家的例子时也可以观察到所有令人不快的问题,当我们得到四位思想家时,也会发生。那仅仅是出于历史原因吗?


1
最初的问题由Dijkstra在1965年描述,并称为Dining Quintuple(在第3页顶部的注释中找到)。

我似乎记得还学习过四个餐饮哲学家……
Michael Borgwardt

16
这是5位哲学家,因为他试图查看是否有人会注意到明显的事物。5位哲学家将一直交谈,直到餐厅将他们赶出去,他们再也不会拿起他们的银器了。4人的谈话中断时间足以让他们开始进食。在任何两个人停止讲话的瞬间,只有5个已经排队等待插话以确保连续性。
Jimmy Hoffa

1
@吉米·霍法-+ 1。那为什么不回答呢?
SChepurin

Answers:


17

根据EWD310 “顺序过程的分层顺序”中的内容,看起来5是出于教育目的而选择的,目的是使学生更容易理解旨在演示解决问题的算法。

本文还进一步支持以下观点:5与一般问题并不真正相关,首先明确指出“该问题可能是由9或25位哲学家提出的……”,其次是通过同时进行两个操作来表示实体,“ A类和B类,共享相同的资源...”

Dijkstra使用的解决方案引入了三种“哲学家状态”:思考,饮食,饥饿。为解决该问题而提供的代码对这三个状态进行了操作,并且与此数量无关的哲学家也是如此。

作者是否会选择哲学家2、3或4的数量,这可能会导致阅读代码的学生感到困惑,无论选择的数量与州的数量或其他方面有关。这可以很容易地试图描述中提到的数字从EWD310引述如下测试:注:例如如何将改变[0:4][0:3][0:2][0:1]和语句涉及mod

与此相反,数字5看起来很纯真,并且不会调用不需要的关联。可以说,选择它是为了更好地说明哲学家的数量是任意的


在EWD310中提出的算法如下:

...我们与每个哲学家关联一个状态变量,“ C”说,其中

C[i] = 0意思是:哲学家i在思考

C[i] = 2意思是:哲学家i在吃饭。

...

我们为最后的过渡介绍了一种中间状态

C[i] = 1意思是:哲学家i饿了

现在每个哲学家都将周期性地经过状态0、1、2、0 ......下一个要问的问题是:什么时候(危险的)哲学家从1过渡到2 K

...

在宇宙中,我们假设已声明

1)semaphore mutex,最初= 1

2)integer array C[0:4],最初所有元素= 0

3)semaphore array prisem[0:4]最初所有元素都为0

4) procedure test (integer value K);

if C[(K-1) mod 5] ≠ 2 and C[K]= 1
    and C[(K+1) mod 5] ≠ 2 do
      begin C[K]:= 2; V(prisem[K]) end;

(此过程可解决K存在时的不稳定问题,将仅在关键部分内调用该过程)。

在这个宇宙中,哲学家的生活w现在可以被编码

cycle begin think;
            P (mutex);
               C[w]:= 1; test (w);
            V(mutex);
            P(prisem[w]); eat
            P(mutex);
               C[w]:= 0; test [(w+l) mod 5];
               test [(w-1) mod 5];
            V(mutex)
      end

这就是我想要的解决方案……


2
那时我可能不是哲学家,因为在进食或饥饿时我可以同​​时思考。还有更多:他们都不在喝酒甚至在讲话。
ott--

5

只有Dijkstra可以肯定地回答,但我有足够的信心相信它是任意的。

“它最初是由Edsger Dijkstra于1965年制定的,它是一项学生考试练习,以计算机竞争访问磁带机外围设备的形式提出。不久之后,Tony Hoare提出了当前的问题。”

http://en.wikipedia.org/wiki/Dining_philosophers_problem


2
考虑四个食客而不是五个食客的问题。问题如何改变?是容易还是困难?这是一个考试问题-难度较大的问题可能是您希望提出的问题。

2

因为很奇怪,甚至没有。因此,您不必尝试设计依赖对称性或形成对的算法,只有很久以后才意识到它不适用于一般情况。

这是一种意见;对于作者的想法,我没有任何历史知识。


这一点至关重要。有四个哲学家,他们中的两对可以轮流吃饭。
亚伦·布里克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.