哲學家就餐問題

2021-10-08 07:31:13 字數 612 閱讀 5119

哲學家就餐問題是乙個著名的併發問題,這個問題的基本情況是(見下圖):假定有5位哲學家圍著乙個圓桌。每兩位哲學家之間有一把餐叉(一共5把)。哲學家有時要思考一會,不需要餐叉;有時又要就餐。而一位哲學家只有同時拿到了左手邊和右手邊的兩把餐叉,才能吃到東西。

下面是每個哲學家的基本迴圈:

while(1

)

關鍵挑戰是如何實現 getforks()和 putforks()函式,保證沒有死鎖,沒有哲學家餓死以及盡可能讓更多哲學家同時吃東西。

首先我們引入兩個輔助函式來幫助構建解決方案,它們是:

int

left

(int p)

intright

(int p)

接著是解決方案:

sem_t forks[5]

;void

getforks()

else

}void

putforks()

哲學家就餐問題

本文是哲學家就餐問題在 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...

哲學家就餐問題

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