【しょくじするてつがくしゃもんだい】

食事する哲学者問題 とは?

最終更新:
💡 一本ずつ持って待つと、誰も食べ始められない

共有するフォークを使う5人の食事を通して、並行処理の資源の取り合いとデッドロックを考える問題。取得順序の統一と、待ち続けないための設計を説明します。

📌 このページのポイント
食事する哲学者:道具の待ち合い食事には左右2本が必要ABCDE全員が一本ずつ持ち、もう一本を待つと誰も進めない → デッドロック対策例:全員が番号順に道具を取る
青い人は5つの処理、橙のフォークは5つの共有資源です。円卓は共有関係を示し、下の文は全員が一本ずつ取得した場合を説明します。
ひよこ ひよこ
哲学者の食事が、コンピュータと関係あるの?
ペンギン先生 ペンギン先生
5人が丸いテーブルに座り、隣同士の間に一本ずつフォークがあると考えるんだ。食事には左右2本が必要。この道具を、プログラムが共有する資源に見立てるよ。
ひよこ ひよこ
全員が左のフォークを先に取ったら?
ペンギン先生 ペンギン先生
全員が一本を持ち、もう一本を隣の人が返すのを待つことになる。食べ終わるまで返さないルールなら、誰も先へ進めない。これがデッドロックの例だよ。
ひよこ ひよこ
二本を同時に取れなければ、いつも止まる?
ペンギン先生 ペンギン先生
そうではないよ。持ったまま待つことなどの条件が組み合わさると問題になる。誰かが食べて道具を返せれば進められるので、「同時に取れない」だけで決まるわけではないんだ。
ひよこ ひよこ
どうすれば待ち合いを防げるの?
ペンギン先生 ペンギン先生
各フォークに番号を付け、全員が小さい番号から取るようにする方法があるよ。資源を待つ関係が輪になるのを防ぐ。同じ考え方を、複数の口座やデータをロックする順序にも使えるんだ。
ひよこ ひよこ
デッドロックを防げれば、全員が順に食べられる?
ペンギン先生 ペンギン先生
必ずしもそうではないよ。一人が長く待ち続ける飢餓の問題も別に考える。待つ人を順番に扱うなど、公平さの設計も必要なんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「食事する哲学者問題」って出てきたら「共有する道具を待ち合って、処理が進まなくなる問題の例え」と思えばだいたいOK!
📖 おまけ:英語の意味
「Dining Philosophers Problem」 = 食事する哲学者問題
💬 食事に必要な二つの道具を共有する状況で、並行処理の同期や資源の取得順序を考える古典的な問題です。

参考資料

← 用語集にもどる