2008-09-06 58 views
6

我不是C#的初學者,但我真的需要增加我的理解,所以我選擇了一個典型的死鎖問題來編寫代碼來幫助自學一些C#的更高級概念。 Dining Philosophers Problem看起來不錯,但我需要一點幫助才能開始。我知道我需要將「食客」作爲對象,但爲了模擬飲食之間的隨機延遲,我應該在單獨的線程中看每個用餐者的線程嗎?我需要某種「主人」來監控所有的行爲嗎?任何一般的設計概念建議都是值得歡迎的,但我想做一些練習來做一些咕嚕編程。謝謝!如何開始編碼「餐飲哲學家」模擬?

+0

嗯......我可能會將「食客」塑造成線程......雖然他們可能是包裝線程的對象。 – paxos1977 2008-10-13 21:36:51

回答

6

我認爲模擬這將是一個Fork類像use()的方法保存叉(bool available = false)和release()釋放它的最好的辦法。

一個PhilosophergetFork(Fork)releaseFork(Fork)操作該保持/釋放對象叉(在我看來,一個計時器將是很好的方法useFork()這樣才能真正感知僵局。

而對於最後一個DinningTable(或其他任何名稱)創建情況,並做記錄。如果你打算使用線程,這裏類是你應該實現每個Philosopher線程贊同爲Fork

作爲一個建議,你可以實現一個Plate類,在時間範圍內持有一定數量的意大利麪,即Philosopher.useFork()方法。這樣你可以看到哪個Philosopher先完成。當然,因爲你的目標是學習C#...在我的經驗中,你最好學習像這些類一樣做一些具體的事情;)另外,你可以在Google上找到大量的實現如果你想作弊...

我邀請你分享它後面的代碼。這是一個很好的學習參考。

希望這可以幫助你。