なぜ5人の食事哲学者なのか?


18

私はなぜ食事哲学者の問題が5人の哲学者の事例に基づいているのかと思っていました。なぜ4つではないのですか?

私たちは4人の思想家を与えられたときにも5人の哲学者の例を議論するときに発生する可能性があるすべての不快な問題を観察できると思います。それは歴史的な理由だけですか?


1
元の問題は1965年にダイクストラによって記述され、Diing Quintupleと呼ばれていました(3ページの上部のメモにあります)。

私はaobut 4つの食事する哲学を学んで覚えているようだ...
マイケルBorgwardt

16
5人の哲学者です。なぜなら、彼は誰もが明白なアウトに気付くかどうかを確認しようとしていたからです。5人の哲学者がレストランで追い出されるまで話し合います。銀器を手に入れることすらありません。4人は、食事を始めるのに十分な長さの会話を中断する可能性があります。2つが少しの間話すのをやめるとすぐに、連続性を確保するために挿入するのを待っているキューにすでに1つがあります。
ジミー・ホッファ

1
@ジミー・ホファ-+ 1。そして、なぜそれは答えないのですか?
–Sシェプリン

回答:


17

EWD310 「Sequential Processesの階層的順序付け」に書かれている内容によれば、問題の解決策を示すために設計されたアルゴリズムを学生が理解しやすくするために、教育目的で5番が選択されているようです。

この非常に論文では、さらにサポート5を明示的にすることを示すことによって最初に、一般的な問題には本当に関係がないという考え「問題は9人のまたは25哲学者のために提起されている可能性が...」と次の二つの面でそれを表現することにより、同時に動作エンティティ、「同じリソースを共有するクラスAおよびクラスB ...」

ダイクストラが使用するソリューションでは、3つの「哲学者の状態」を紹介しています。思考、食事、空腹です。この問題を解決するために提示されたコードは、これらの3つの状態と、それとは無関係の哲学者の数を操作します。

著者が哲学者2、3、または4の数を選択した場合、選択した数が州の量または他の何かに関係しているかどうかにかかわらず、コードを読む学生の混乱を引き起こす可能性があります。これがどう変化するか、たとえばノート:これは簡単に下にEWD310から引用説明で述べた数字を試みることによってテストすることができます[0:4][0:3][0:2][0:1]と記述が関与しますmod

これとは対照的に、5番はかなり無害に見え、不要な関連付けを呼び出しません。哲学者の数は、arbitrary意的であるということをよりよく説明するために選ばれたと言えるでしょう。


上記のアルゴリズムは、次のように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

ダイクストラだけが確実に答えることができますが、私はそれがarbitrary意的であることを十分に確信しています。

「元は1965年にEdsger Dijkstraが学生の試験問題として策定したもので、テープドライブの周辺機器へのアクセスを競合するコンピューターの観点から提示されました。

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


2
5人と比較して4人のダイナーの問題を考えてみましょう。問題はどのように変わりますか?簡単ですか、難しいですか?これは試験問題でした-難しいものはおそらく質問したいものです。

2

偶数ではなく、奇数だからです。そのため、対称性またはペアの形成に依存するアルゴリズムを考案しようとはせず、一般的な場合には機能しないことに気づきます。

これは意見です。私は著者の心を越えたものの歴史的な知識を持っていません。


この点は重要です。4人の哲学者がいる場合、2組のペアが交互に食事をすることができます。
アーロンブリック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.