用AND描述哲學家進餐問題

2025-04-30 00:50:05 字數 1279 閱讀 8355

哲學家就餐問題

1樓:匿名使用者

1全部規定在拿到左側的筷子後,先檢查右面的筷子是否可用。如果不可用,則先放下左側筷子, 等一段時間再重複整個過程。 分析:

當出現以下情形,在某乙個瞬間,所有的哲學家都同時啟動這個演算法,拿起左側的筷 子,而看到右側筷子不可用,又都放下左側筷子,等一會兒,又同時拿起左側筷子……如此 這樣永遠重複下去。對於這種情況,所有的程式都在執行,但卻無法取得進展,即出現飢餓, 所有的哲學家都吃不上飯。 (2) 描述一種沒有人餓死(永遠拿不到筷子)演算法。

考慮了四種實現的方式(a、b、c、d): a.原理:至多隻允許四個哲學家同時進餐,以保證至少有乙個哲學家能夠進餐,最終總會釋 放出他所使用過的兩支筷子,從而可使更多的哲學家進餐。

以下將room 作為訊號量,只允 許4 個哲學家同時進入餐廳就餐,這樣就能保證至少有乙個哲學家可以就餐,而申請進入 餐廳的哲學家進入room 的等待佇列,根據fifo 的原則,總會進入到餐廳就餐,因此不會 出現餓死和死鎖的現象。 偽碼: semaphore chopstick[5]=; semaphore room=4; void philosopher(int i) }b.原理:

僅當哲學家的左右兩支筷子都可用時,才允許他拿起筷子進餐。 方法1:利用and 型訊號量機制實現:

根據課程講述,在乙個原語中,將一段**同時需 要的多個臨界資源,要麼全部分配給它,要麼乙個都不分配,因此不會出現死鎖的情形。當 某些資源不夠時阻塞呼叫程序;由於等待佇列的存在,使得對資源的請求滿足fifo 的要求, 因此不會出現飢餓的情形。 偽碼:

semaphore chopstick[5]=; void philosopher(int i) }方法2:利用訊號量的保護機制實現。通過訊號量mutex對eat()之前的取左側和右側筷 子的操作進行保護,使之成為乙個原子操作,這樣可以防止死鎖的出現。

偽碼: semaphore mutex = 1 ; semaphore chopstick[5]=; void philosopher(int i) }

哲學家進餐問題的產生背景

2樓:彥楓組織

由荷蘭學者dijkstra提出的哲學家進餐問題(the dinning philosophers problem)是經典的同步問題之一。哲學家進餐問題是一大類併發控制問題的典型例子,涉及訊號量機制、管程機制以及死鎖等作業系統中關鍵問題的應用,在作業系統文化史上具有非常重要的地位。對該問題的剖析有助於深刻地理解計算機系統中的資源共享、程序同步機制、死鎖等問題,並能熟練地將該問題的解決思想應用於生活中的控制流程。

關於哲學家進餐問題 40

哲學家就餐問題 兩個地方應該是pv操作,pv都是操作元語,不可中斷p操作是將訊號量 v操作是將訊號量 pv一定要配對使用。哲學家進餐可以通過訊號量機制解決,避免死鎖註釋如下 voidtest int i 測試哲學家i是否滿足eating條件 通過p操作後進入eating,否則在p s i 處阻塞 s...

希臘有哪些哲學家,古希臘哲學家有哪些?

泰勒斯 萬物的源頭是水 赫拉克利特 世界是一團熊熊的烈火 蘇格拉底,柏拉圖,普羅泰戈爾 蠟燭在大也沒有楊貴妃的錢多 但是如果銀河系愛上了螞蟻 那麼宇宙就輸給了奈米 所以人一定要懂得放棄 古希臘哲學家有哪些?阿那克薩哥拉 anaxagoras 阿那克西曼德 anaximander 繪製第一張全球地圖的...

國外有哪些哲學家,西方著名的哲學家有哪些?

一 古希臘 泰勒斯 畢達哥拉斯 赫拉克利特,德拉克利特 伊壁鳩魯 蘇格拉底 柏拉圖 亞里斯多德等等 二 古羅馬 西塞羅 盧克萊修 斐洛 愛比克泰德 德爾圖良 第歐根尼 普羅提諾等等 三 中世紀 奧古斯丁 德爾圖良 阿爾伯特等等四 近現代 弗蘭西斯 培根 笛卡爾 斯賓諾莎 洛克 萊布尼茨 康德 邊沁 ...