81:哲学者に例えると…

<<BACK>> back to HOME mail to DICE管

『食事する哲学者の問題』
…円卓を囲んで5人の哲学者が思索にふけっている.
彼らは、たまに自分が空腹であることを思い出し、食事をとろうとする.
円卓中央の皿には山盛りにされたスパゲティ。
しかし、これはあまりにからまっているため、食べる時は両手にフォークを持って食べる必要がある.
フォークは、哲学者と哲学者の間に一本ずつ計5本置いてある.
右隣りの哲学者が食事をしている最中は、右側のフォークは使用中であり、使えない.
左についても同じ.
ここで、哲学者が餓死しないようにするには、どんなプログラムを書けば良いか?


くだらないけど、すごく難しい問題でなかなか面白い.
「そんなん順番に食べたらいいやん.」
確かにそうやけど、それじゃ問題にならない.

登場人物が哲学者というのが、いい感じ.

哲学者を定義するとすれば、
 □食に対する執着心が無い.
 □「お前さっき食べたやろ」とか言わない
 □「あっフォークが使えない」→食べのをあきらめる
つまり、普通の人なら話合うという手段があるんやけども、
哲学者はそういうわけにいかない.

昨日からうまい方法が無いかと考えているのだが…
なかなか見つからず.

例えば以下のプログラムを作る.
 @左のフォークを取る⇒右のフォークを取る⇒食べる⇒フォークを開放.
 Aフォークが使用中の場合、それが開放されるまで待つ.
これで行けるかと思いきや、これは致命的問題があります.
もし、5人全員がいっせいにフォークを握ろうとしてしまった場合、
全員左のフォークを握ると、そのまま誰も放さないため、永遠に右のフォークは空かない.
この状態が『デッドロック』。

実は、授業で習った話で並列処理に関する有名な問題。
並行動作するプログラムを書く時に必ずぶつかる壁で、
普通に考えてたら、そのバグを取ることができないらしい.
長年研究されてる難問.

こんな話も大学に行かなかったら知らんわけやし、
こういう場合に、大学来た意味があるなと思う.
1/10 13:41(土)