我不是C#的初學者,但我真的需要增加我的理解,所以我選擇了一個典型的死鎖問題來編寫代碼來幫助自學一些C#的更高級概念。 Dining Philosophers Problem看起來不錯,但我需要一點幫助才能開始。我知道我需要將「食客」作爲對象,但爲了模擬飲食之間的隨機延遲,我應該在單獨的線程中看每個用餐者的線程嗎?我需要某種「主人」來監控所有的行爲嗎?任何一般的設計概念建議都是值得歡迎的,但我想做一些練習來做一些咕嚕編程。謝謝!如何開始編碼「餐飲哲學家」模擬?
6
A
回答
6
我認爲模擬這將是一個Fork
類像use()
的方法保存叉(bool available = false
)和release()
釋放它的最好的辦法。
一個Philosopher
類getFork(Fork)
和releaseFork(Fork)
操作該保持/釋放對象叉(在我看來,一個計時器將是很好的方法useFork()
這樣才能真正感知僵局。
而對於最後一個DinningTable
(或其他任何名稱)創建情況,並做記錄。如果你打算使用線程,這裏類是你應該實現每個Philosopher
線程贊同爲Fork
。
作爲一個建議,你可以實現一個Plate
類,在時間範圍內持有一定數量的意大利麪,即Philosopher.useFork()
方法。這樣你可以看到哪個Philosopher
先完成。當然,因爲你的目標是學習C#...在我的經驗中,你最好學習像這些類一樣做一些具體的事情;)另外,你可以在Google上找到大量的實現如果你想作弊...
我邀請你分享它後面的代碼。這是一個很好的學習參考。
希望這可以幫助你。
相關問題
- 1. 餐飲哲學家算法死鎖
- 2. erlang和餐飲哲學家的併發
- 3. 餐飲哲學家使用信號燈
- 4. 餐飲哲學家(我的實現)過程不溝通
- 5. Java與餐飲哲學家之間的信號量問題
- 6. 餐飲哲學家 - 最後的線程沒有正常終止
- 7. 餐飲哲學家的解決方案陷入僵局
- 8. 餐飲哲學家使用二元信號量
- 9. 我的信號量模塊工作不正常(餐飲哲學家)
- 10. 導體解決哲學家晚餐
- 11. 在餐飲哲學家的算法中將信息傳遞給多個線程
- 12. 哲學家蟒蛇
- 13. 用餐哲學家,用他們吃的次數來實現?
- 14. 哲學家就餐,innodb的,選擇用於更新
- 15. 另一個哲學家就餐併發問題
- 16. 哲學家同步算法
- 17. 關於我的熟睡理髮師和餐飲哲學家算法的正確性的提示(不是答案)?
- 18. 我如何證明哲學家哲學家是否患有死亡或飢餓的可能性?從哪兒開始?
- 19. 開發團隊的開發哲學
- 20. 如何開始學習linux內核編程,編碼或閱讀?
- 21. 我如何開始學習彙編
- 22. React CSS哲學
- 23. UITableView NSFetchedResultsController哲學
- 24. SVN合併 - 哲學
- 25. 如何開始學習SharePoint
- 26. 如何開始學習Android?
- 27. 如何開始學習hadoop
- 28. 如何編寫JavaScript代碼餐廳
- 29. 關於商業規則的哲學家問題
- 30. 在java中使用信號量使用哲學家
嗯......我可能會將「食客」塑造成線程......雖然他們可能是包裝線程的對象。 – paxos1977 2008-10-13 21:36:51