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