6

私は C# の初心者ではありませんが、理解を深める必要があるので、C# のより高度な概念のいくつかを独学できるように、古典的なデッドロックの問題をコーディングに選びました。食事の哲学者問題は良い問題のように思えますが、始めるには少し助けが必要です。オブジェクトとして「ダイナー」にアプローチする必要があることはわかっていますが、食事の間のランダムな遅延をシミュレートするには、各ダイナーを個別のスレッドでスレッド化する必要がありますか? すべてのアクションを監視するには、ある種の「マスター」が必要ですか? 一般的な設計コンセプトのアドバイスは大歓迎ですが、練習として単調なプログラミングをしたいと思います。ありがとう!

4

1 に答える 1

6

それをシミュレートするための最良のアプローチは、fork()を保持し、それを解放するForkようなメソッドを持つクラスだと思います。use()bool available = falserelease()

オブジェクトForkの保持/解放を操作するandを使用するPhilosopherクラス(私にはタイマーがメソッドに適しているように思われるので、デッドロックを実際に認識できます。getFork(Fork)releaseFork(Fork)useFork()

そして、LastのDinningTable場合、インスタンスを作成し、ログを記録する(または他の名前の)クラス。スレッドを使用する場合は、ここで、の同時実行ごとにスレッドを実装する必要がありPhilosopherますFork

提案として、時間枠の間にメソッドが低くPlateなる量のスパゲッティを保持して、クラスを実装することができます。Philosopher.useFork()このようにして、どちらがPhilosopher最初に終了するかを確認できます。

もちろん、実装はあなたに任せます。あなたの目的はC#を学ぶことなので、私の経験では、これらのクラスのような具体的なことを学ぶほうがよいでしょう;)さらに、必要に応じて、Googleで多くの実装を見つけることができます。浮気 ...

その後、コードを共有することをお勧めします。それは素晴らしい研究リファレンスです。

これがお役に立てば幸いです。

于 2008-09-06T19:09:56.613 に答える