私はC#の初心者ではありませんが、理解を深める必要があるため、C#のより高度な概念を教えるために、古典的なデッドロックの問題を取り上げました。 Dining Philosophers Problemは良いもののようですが、私はちょっとした助けが必要です。私はオブジェクトとして "ダイナー"にアプローチする必要があることを知っていますが、食べる間のランダムな遅延をシミュレートするために、別のスレッドで各ダイナーとスレッドを見なければなりませんか?すべての行動を監視するために何らかの「マスター」が必要ですか?どのような一般的なデザインコンセプトのアドバイスも歓迎ですが、私は運動としてぎこちないプログラミングをしたいと思います。ありがとう!"Dining Philosophers"シミュレーションのコーディングを開始するにはどうすればよいですか?
6
A
答えて
6
私はそれをシミュレートするための最良のアプローチは、それを解放フォークを保持しているuse()
のような方法(bool available = false
)とrelease()
でFork
クラスになると思います。
タイマーがuseFork()
はそうあなたが本当にデッドロックを知覚することができる方法で良いでしょう。
、最後のAのためのフォークは(私には思えるのオブジェクトの解放/保持を運営getFork(Fork)
とreleaseFork(Fork)
とPhilosopher
クラスDinningTable
(または他の名前)のインスタンスを作成するクラス、およびログを行う。あなたがスレッドを使用する予定の場合は、Fork
のために同意各Philosopher
ためのスレッドを実装する必要があります場合は、ここにある。
の提案として、あなたは可能性がありPlate
クラスを実装し、時間枠の間に方法がより低いスパゲッティの量を保持する。この方法で、Philosopher
が最初に終了するかどうかを確認できます。
あなたの目的は私の経験では、これらのクラスのような具体的なことを学ぶことがあなたの目的であるので、あなたの目的はもちろんです。;)さらに、Googleでたくさんの実装を見つけることができますあなたが不正行為をしたい場合...
私はそれの後にコードを共有するようにあなたを招待します。それは素晴らしい研究の参考資料です。
希望これはあなたに役立ちます。
関連する問題
- 1. Hadoopのマップを開始するにはどうすればよいですか?
- 2. ブルートゥースペアリングのプロセスを開始するにはどうすればよいですか?
- 3. Windowsでサブプロセスを開始するにはどうすればよいですか?
- 4. MDIでマウスイベントを開始するにはどうすればよいですか?
- 5. アンカータグでストライプクレジットカードチェックアウトを開始するにはどうすればよいですか?
- 6. webpackでプロダクションを開始するにはどうすればよいですか?
- 7. ASC3(ActionScript 3)フレームの開始時にリスニングを開始するにはどうすればよいですか?
- 8. アプリトラッキングを開始するにはどうすればよいですか?
- 9. Android - 方法を開始するにはどうすればよいですか?
- 10. 継続タスクインスタンスを開始するにはどうすればよいですか?
- 11. Javaプログラミングを開始するにはどうすればよいですか?
- 12. アクティビティを開始するにはどうすればよいですか?
- 13. ベストプラクティス:Flexでレイアウトをコーディングするにはどうすればよいですか?
- 14. J2MEでAndroidをコーディングするにはどうすればよいですか?
- 15. wix:ProgressDlgでインストールプロセスを開始するにはどうすればいいですか?
- 16. 「電話サービス」(電話バンキングなど)の開発を開始するにはどうすればよいですか?
- 17. カラーピケットダイアログを開始するにはどうすればいいですか?
- 18. 光り輝くアプリの開始時にナビゲートパネルを展開するにはどうすればよいですか?
- 19. Scalaを使用してWebの開発を開始するにはどうすればよいですか?
- 20. EDI 837 Professionalの開発を開始するにはどうすればよいですか?
- 21. UBUNTU 9.04でCUDA開発を開始するにはどうすればよいですか?
- 22. AndroidでSkypeアプリケーション開発を開始するにはどうすればよいですか?
- 23. iPhone向けに開発を開始するにはどうすればよいですか?
- 24. 既存のプロジェクトでgithubの新しいリポジトリを開始するにはどうすればよいですか?
- 25. TWikiのページについてのディスカッションを開始するにはどうすればよいですか?
- 26. System.Diagnostics.Process.Start()で開始されたコンソールアプリケーションのウィンドウタイトルを指定するにはどうすればよいですか?
- 27. リアルタイムで通信するWPFアプリケーションの作成を開始するにはどうすればよいですか?
- 28. 今日のコーディングを開始するとネイティブアプリのナビゲーションオプションがどのように反応するのですか?
- 29. 最大値ではなく0からカウンタを開始するにはどうすればよいですか?
- 30. ユーザー入力に基づいて、他のプレイブックを開始するにはどうすればよいですか?
ええと...私はたぶん "ダイナー"をスレッドとしてモデル化していますが、オブジェクトをラッピングするオブジェクトにすることもできます。 – paxos1977