2008-09-06 4 views
6

私はC#の初心者ではありませんが、理解を深める必要があるため、C#のより高度な概念を教えるために、古典的なデッドロックの問題を取り上げました。 Dining Philosophers Problemは良いもののようですが、私はちょっとした助けが必要です。私はオブジェクトとして "ダイナー"にアプローチする必要があることを知っていますが、食べる間のランダムな遅延をシミュレートするために、別のスレッドで各ダイナーとスレッドを見なければなりませんか?すべての行動を監視するために何らかの「マスター」が必要ですか?どのような一般的なデザインコンセプトのアドバイスも歓迎ですが、私は運動としてぎこちないプログラミングをしたいと思います。ありがとう!"Dining Philosophers"シミュレーションのコーディングを開始するにはどうすればよいですか?

+0

ええと...私はたぶん "ダイナー"をスレッドとしてモデル化していますが、オブジェクトをラッピングするオブジェクトにすることもできます。 – paxos1977

答えて

6

私はそれをシミュレートするための最良のアプローチは、それを解放フォークを保持しているuse()のような方法(bool available = false)とrelease()Forkクラスになると思います。

タイマーがuseFork()はそうあなたが本当にデッドロックを知覚することができる方法で良いでしょう。

、最後のAのためのフォークは(私には思えるのオブジェクトの解放/保持を運営getFork(Fork)releaseFork(Fork)PhilosopherクラスDinningTable(または他の名前)のインスタンスを作成するクラス、およびログを行う。あなたがスレッドを使用する予定の場合は、Forkのために同意各Philosopherためのスレッドを実装する必要があります場合は、ここにある。

の提案として、あなたは可能性がありPlateクラスを実装し、時間枠の間に方法がより低いスパゲッティの量を保持する。この方法で、Philosopherが最初に終了するかどうかを確認できます。

あなたの目的は私の経験では、これらのクラスのような具体的なことを学ぶことがあなたの目的であるので、あなたの目的はもちろんです。;)さらに、Googleでたくさんの実装を見つけることができますあなたが不正行為をしたい場合...

私はそれの後にコードを共有するようにあなたを招待します。それは素晴らしい研究の参考資料です。

希望これはあなたに役立ちます。

関連する問題