哲學家用餐問題,5位哲學家坐在圓桌旁,每對哲學家之間只有一根筷子。如果乙個哲學家可以拿起他旁邊的兩根筷子,他就可以吃東西。一根筷子可以由其相鄰的任何乙個哲學家拿起,但不能同時被兩個哲學家拿起。
如果遵循乙個簡單的規則,就可以避免死鎖:讓所有執行緒以相同的順序宣告並釋放其鎖。這樣,您永遠不會陷入可能發生死鎖的情況。
甚至就餐哲學家問題也可以視為違反此規則,因為它使用左右勺子的相對概念,這導致使用不同勺子分配順序的執行緒不同。如果勺子的編號是唯一的,而所有的哲學家都試圖首先獲得編號最小的勺子,那麼死鎖將是不可能的。
我認為,預防勝於**。
這是我喜歡遵循的確保執行緒正常工作的兩個準則之一。另乙個是確保每個執行緒對自己的執行全權負責,因為它是唯一乙個在任何時間點都知道自己在做什麼的執行緒。
因此,這意味著沒有thread.stop
呼叫,請使用全域性標誌(或訊息佇列或類似的東西)告訴另乙個執行緒您要採取的措施。然後讓該執行緒執行實際工作。
哲學家用餐問題
哲學家用餐問題,怎麼樣保證沒有死鎖,最直接的乙個方案就是要保證,每乙個哲學家在拿筷子的時候,左右兩邊都能拿到,才去拿,如果不能保證那就乙個筷子都不拿。對與這個問題的實現,可以設定五個訊號量,標識筷子是否可以拿。具體 如下。public static class person implements r...
哲學家用餐問題
五個哲學家共用一張圓桌,分別坐在周圍的五張椅子上,在桌子上有五隻碗和五隻筷子,他們的生活方式是交替地進行思考和進餐。平時,乙個哲學家進行思考,飢餓時便試圖取用其左右最靠近他的筷子,只有在他拿到兩隻筷子時才能進餐。進餐畢,放下筷子繼續思考。在這裡插入描述 分析 放在桌子上的筷子是臨界資源,在一段時間內...
linux多執行緒 3 哲學家用餐 mutex實現
ref 5跟筷子,5個哲學家,哲學家要吃飯,自然要兩根筷子,這樣就出現資源爭用的情況。哲學家只能用左邊和右邊的筷子,兩根筷子備齊才能吃飯!使用mutex的話,就是每個筷子乙個mutex,需要5個mutex,哲學家先lock左邊的筷子,如果有人已經在用那根筷子了,那就等著,不然左邊的筷子就拿到手了,然...