5人の間にフォークが1本ずつあり、食事には両隣の2本が必要です。全員が左を取ると、右を取得できず待ち続けます。
食事する哲学者によるデッドロック実験
1. 取得順を選択
2. 実行
思考中
空腹(フォーク待ち)
食事中
デッドロック
点線:待っているフォーク
規則を変えて同じ操作を繰り返し、結果を比較してください。
成立には4条件すべてが必要
相互排除:1本を使えるのは1人だけです。 保持して待機:1本を持ちながら次を待ちます。 横取り不可:他人のフォークを強制回収できません。 循環待ち:P0→P1→…→P4→P0の待機の輪ができます。
どれか1条件を破れば防止できます。
循環待ちを断つ
資源に番号を付け、全員が小さい番号から取得します。P4だけは右の0番が先になるため輪ができません。複数ミューテックスを一定順序で取得するのも同じ考えです。