C/C++の宿題を片付けます 58代目
■ このスレッドは過去ログ倉庫に格納されています
0336デフォルトの名無しさん
2006/01/21(土) 00:28:27(なお、シュレディンガーの半死半生の猫の話はHALってマンガからの引用)
えーっと。哲学者の食事の解説(上手な解説はWebで見てくれ。脳内の情報だけで書いてる)
A)円形の卓があって、哲学者がN人居て、その間に1つづつ食器が置いてある。
B)哲学者は食器を2つ使わないとメシが喰えない。
C)哲学者は以下の動作を1つだけする
C1)まだ食器を持っていないなら、右手の食器を取ろうとする。右手の食器が開いていなければ次のチャンスを待つ
C2)C1が完了していれば、左手の食器を持とうとする。左手の食器が開いてなければ次のチャンスを待つ
C3)両手に食器を持っていれば、(メシを一口喰って)両手の食器を離す
D)哲学者が行動する順序はランダムである(続けて1人の哲学者が行動を続けることもある)
・・・ってすると、そのうち状態が変化しなくなってしまう。
改善:
食器に1〜Nの番号を振る(Cらしく、0〜N-1でも可)。
C1〜C2)を次のように変える。
C1)左右にある食器のうち若い番号の食器を持とうとする。持てなかったらC1へ
C2)もう一方の番号の食器を持とうとする。持てなかったらC2へ
■ このスレッドは過去ログ倉庫に格納されています