Dijkstraの論文 "Humble Programmer" で、彼は一部のボランティアに解決すべき問題を与えたと述べています:
「私は本当に経験豊富なボランティアと少しプログラミング実験を行いましたが、まったく意図していないものと予想外のことが判明しました。私のボランティアは誰も、明白で最もエレガントな解決策を見つけませんでした。詳細な分析の結果、これには共通の情報源があることがわかりました。彼らの繰り返しの概念は、ステップアップされる関連する制御変数のアイデアに非常に密接に関連しており、明白なものを見ることが精神的に妨げられていました。彼らのソリューションは効率が悪く、不必要に理解することが難しく、それらを見つけるのに非常に長い時間がかかりました。」
ダイクストラがボランティアに与えた問題は何でしたか?解決策は何でしたか?
「食事する哲学者の問題」は提示された問題でした。
基本的に、食べる必要のある哲学者は5人います。 (各哲学者の前で終わることのない食べ物の皿を想像してください)、各皿の間にはフォークがあります(5つの皿、5つのフォーク、5つの哲学者)。
哲学者は、右のフォークと左のフォークの両方を持っている場合にのみ食べることができます。 (同時に食べることができる哲学者は2人だけです)。
フォークは利用可能なときにいつでもピックアップでき、保持されている場合は下に置くことができます。各フォークは相互依存的にピックアップする必要があります。 (一つずつ)。
哲学者は食事をしていませんが、彼らは考えています(状態を変える必要があることが問題を引き起こしています)。
デッドロックシステム(1つの哲学者が1つのフォークを持ち、もう1つの哲学者が他の哲学者を食べないように待機しているシステム)を作成せずに、それぞれの人に食べて代替思考(他の人が食べることができる)を許可するにはどうすればよいですか?.
これは並行システムにそのルーツがあり、並行性を議論するときに提示される典型的な大学の質問です。
この問題を解決するために4つまたは5つの「公式」アルゴリズムが開発されたと思いますが、Googleで「食事する哲学者の問題」をすばやく検索すると、さまざまな結果が得られます。
Standford Uからのこの問題の詳細については、次のURLにアクセスしてください。 http://academicearth.org/lectures/dining-philosopher-problem
ウィキペディアの記事は次の場所にあります http://en.wikipedia.org/wiki/Dining_philosophers_problem
MSDN Magizineのソリューションは、次の場所にあります。 http://msdn.Microsoft.com/en-us/magazine/dd882512.aspx
866ページの脚注に 論文の元のバージョンを読む と記載されている場合、「IFIP Congress 1965、213-217の議事録。「並行プログラミング制御における問題の解決策」。
並行性と共有リソースの問題は、「食事する哲学者の問題」です。 :-)
お役に立てば幸いです。