私は C# の初心者ではありませんが、理解を深める必要があるので、C# のより高度な概念のいくつかを独学できるように、古典的なデッドロックの問題をコーディングに選びました。食事の哲学者問題は良い問題のように思えますが、始めるには少し助けが必要です。オブジェクトとして「ダイナー」にアプローチする必要があることはわかっていますが、食事の間のランダムな遅延をシミュレートするには、各ダイナーを個別のスレッドでスレッド化する必要がありますか? すべてのアクションを監視するには、ある種の「マスター」が必要ですか? 一般的な設計コンセプトのアドバイスは大歓迎ですが、練習として単調なプログラミングをしたいと思います。ありがとう!
1 に答える
それをシミュレートするための最良のアプローチは、fork()を保持し、それを解放するFork
ようなメソッドを持つクラスだと思います。use()
bool available = false
release()
オブジェクトForkの保持/解放を操作するandを使用するPhilosopher
クラス(私にはタイマーがメソッドに適しているように思われるので、デッドロックを実際に認識できます。getFork(Fork)
releaseFork(Fork)
useFork()
そして、LastのDinningTable
場合、インスタンスを作成し、ログを記録する(または他の名前の)クラス。スレッドを使用する場合は、ここで、の同時実行ごとにスレッドを実装する必要がありPhilosopher
ますFork
。
提案として、時間枠の間にメソッドが低くPlate
なる量のスパゲッティを保持して、クラスを実装することができます。Philosopher.useFork()
このようにして、どちらがPhilosopher
最初に終了するかを確認できます。
もちろん、実装はあなたに任せます。あなたの目的はC#を学ぶことなので、私の経験では、これらのクラスのような具体的なことを学ぶほうがよいでしょう;)さらに、必要に応じて、Googleで多くの実装を見つけることができます。浮気 ...
その後、コードを共有することをお勧めします。それは素晴らしい研究リファレンスです。
これがお役に立てば幸いです。