2017-03-17 60 views
-3

我必須實現哲學家哲學問題的解決方案,用戶將輸入哲學家的數量和他們吃多少次。該程序將運行這些信息。有人可以參考正確的地方開始這一點。用餐哲學家,用他們吃的次數來實現?

我已經試過: 我知道,有許多不同類型的這種實現的。但是,我找不到一個能夠攝入次數的人。這個算法涉及哪部分?

+2

什麼是餐飲哲學家的問題呢? –

+0

如何爲自己尋找解決方案而不是尋找他人的解決方案。他們可能會有更加完善的解決方案,但我認爲這項工作的重點在於,您要考慮如何去做並使之運作起來。即使編碼可能只是複製粘貼馬拉松,但這並不是你如何學習解決問題,而僅僅依賴於其他人的(可能是錯誤的)解決方案,而這些解決方案你不理解。 –

回答

1

如你所知,以期實現相互排斥,使用潛在工具,如互斥和信號量多線程/進程的Dining Philosophers問題的交易。

的問題n哲學家圍坐在桌旁開始。對於每個哲學家的左右,有一個chopstick。當一個哲學家不再思考並且變得飢餓時,他/她會嘗試每次拿起左/右筷子以便他/她吃東西。當哲學家完成後,他/她會放下筷子,然後開始思考。

這個比喻,如你所知,有哲學家是線程/進程和筷子一些資源在其中分享和需要,以執行一些任務一塊的。必須預成形,使得deadlock不能發生即process_one持有資源r1和請求資源r2,但是,另一種方法process_two保持r2和請求資源r1。虛空進程將放棄他們的資源,因此係統處於死鎖狀態。

你的約束,並不必然怎麼處理的線程/進程試圖獲取他們的資源。相反,我建議你在代碼中有一個共享資源,例如一個數組,初始化的大小爲p,用於哲學家數量,填充整數e是每個哲學家需要吃的次數。每次線程/進程通過獲取其所需資源(筷子)來執行其任務時,都會在與某些哲學家相關的某個索引處將該數組遞減。允許這些線程/進程繼續下去,直到數組全部爲零,得出所有哲學家已經吃掉的結論。也許這是你在找什麼?

+0

謝謝,這就是我一直在尋找的! –