「食事する哲学者の問題」の版間の差分
削除された内容 追加された内容
編集の要約なし |
編集の要約なし |
||
44行目:
=== リソース階層による解法 ===
もう1つの単純な解法は、リソース(この場合はフォーク)に[[順序集合|半順序]]を割り当てる方法で、リソースの要求順序は常にリソースの順序の通りに行い、リソース解放はその逆の順序に行う。そして、順序的に無関係なリソースをあるユニットが同時に使うことはないとする。リソース(フォーク)に1から5までの番号を付与し、動作ユニット(哲学者)は常に番号の
この解法は[[エドガー・ダイクストラ|ダイクストラ]]が最初に提案したものの1つである。
73行目:
スタベーション問題も解決できる。''clean'' と ''dirty'' のラベルは、最も長く食事にありつけていないプロセスを優先し、最近食事したプロセスの優先順位を下げる効果がある。哲学者がフォークを手放さずに2回続けて食事できないという規定を設けた解法と比べてみると、上に述べた解法の方が柔軟だが、傾向は後者と同じだということがわかる。
この分析から、彼らはフォークの配布とそのclean/dirty状態による優先レベルのシステムを導き出した。彼らはこのシステムを非環状グラフで表せるかもしれないとし、もしそうなら、その動作は環状グラフに変換できないことになる。それは、デッドロックが起きないことを保証しているのと等しい。しかし、システムが最初に完全に対称な状態(例えば、哲学者が全員左のフォークを持っている状態)に初期化される場合、グラフは最初から環状になり、デッドロックを防ぐことができない。
== 解法の例 ==
|