哲學家就餐問題

2021-09-02 05:59:52 字數 1107 閱讀 3034

哲學家就餐問題是作業系統中p、v操作部分的經典問題。哲學家就餐問題是在電腦科學中的乙個經典問題,用來演示在平行計算中多執行緒同步(synchronization)時產生的問題。在2023年,著名的計算機科學家艾茲格·迪科斯徹提出了乙個同步問題,即假設有五颱計算機都試圖訪問五份共享的磁帶驅動器。稍後,這個問題被托尼·霍爾重新表述為哲學家就餐問題。這個問題可以用來解釋死鎖和資源耗盡。

1. 問題描述

​ 有五個哲學家圍坐在一圓桌旁,桌**有一盤通心麵,每人面前有乙隻空盤子,每兩人之間放一把叉子。每個哲學家思考、飢餓、然後吃通心麵。為了吃麵,每個哲學家必須獲得兩把叉子,且每人只能直接從自己左邊或右邊去取叉子

圖示:

2. 問題說明

3. p、v操作-解法1

semaphore fork[5]

=;cobegin

process philosoper_i()

}process philosoper_4()

}coend

4. p、v操作-解法2
semaphore fork[5]

=;semaphore room =4;

// 增加一位侍者

cobegin

process philosoper_i()

}coend

5. p、v操作-解法3
semaphore fork[5]

=;cobegin

process philosoper_i()

else

}coend

6. p、v操作-解法4
semaphore fork[5]

=;semaphore mutex =1;

// 設定叉子的互斥訊號量

cobegin

process philosoper_i()

}coend

d*****( ̄▽ ̄*)

哲學家就餐問題

本文是哲學家就餐問題在 linux 上的程式實現,與windows 平台的實現類似,程式上稍有不同。philosopherdining.cpp include include include include include include rasutil.h using namespace std ...

哲學家就餐問題

pragma once include include include include include include include include include include include include include stdafx.h handle chopstick 5 room l...

哲學家就餐問題

假設有五位哲學家圍坐在一張圓形餐桌旁,做以下兩件事情之一 吃飯,或者思考。吃東西的時候,他們就停止思考,思考的時候也停止吃東西。餐桌中間有一大碗義大利面,每兩個哲學家之間有乙隻餐叉。因為用乙隻餐叉很難吃到義大利面,所以假設哲學家必須用兩隻餐叉吃東西。他們只能使用自己左右手邊的那兩隻餐叉。哲學家就餐問...