私はなぜ食事哲学者の問題が5人の哲学者の事例に基づいているのかと思っていました。なぜ4つではないのですか?
私たちは4人の思想家を与えられたときにも5人の哲学者の例を議論するときに発生する可能性があるすべての不快な問題を観察できると思います。それは歴史的な理由だけですか?
私はなぜ食事哲学者の問題が5人の哲学者の事例に基づいているのかと思っていました。なぜ4つではないのですか?
私たちは4人の思想家を与えられたときにも5人の哲学者の例を議論するときに発生する可能性があるすべての不快な問題を観察できると思います。それは歴史的な理由だけですか?
回答:
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
、初期= 12)、
integer array C[0:4]
最初はすべての要素= 03)
semaphore array prisem[0:4]
最初はすべての要素= 04)
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
これで、私が目指していた解決策が終わりました...
ダイクストラだけが確実に答えることができますが、私はそれがarbitrary意的であることを十分に確信しています。
「元は1965年にEdsger Dijkstraが学生の試験問題として策定したもので、テープドライブの周辺機器へのアクセスを競合するコンピューターの観点から提示されました。
偶数ではなく、奇数だからです。そのため、対称性またはペアの形成に依存するアルゴリズムを考案しようとはせず、一般的な場合には機能しないことに気づきます。
これは意見です。私は著者の心を越えたものの歴史的な知識を持っていません。