哲学者
無限ループなのになぜか終了してしまうという問題は、id:mzp に、最後の forkOS を消せばいいとアドバイスされて解決されました。サンクス。
うむ、たしかに親は子の終了を待たないってどっかに書いてあったな。なんで気がつかなかったんだろう。
あと Concurrent Haskell では、全てのスレッドが MVar を読もうとして止まると、それを検出してプロセスを止めてくれるようです。
% ./philo "OK! (1)" "OK! (1)" "OK! (1)" (略) "OK! (3)" "OK! (2)" "OK! (1)" "OK! (4)" "OK! (3)" "OK! (2)" philo: thread blocked indefinitely %