這是哲學家進餐問題的c++程式,這裡使用的進餐方式是只有當哲學家左右兩邊都有可用筷子時才可以進餐,如果只有乙隻左手筷子放下自己左手筷子。如果對其中函式有不理解的可以看我另一篇部落格程序相關函式彙總解釋,對照著看,可能方便你理解
#include
#include
#include
using
namespace std;
//命名空間 std 內定義的所有識別符號都有效
const
unsigned
int philosopher_num =5;
//哲學家數目
const
char thinking=1;
/*標記當前哲學家的狀態,1 表示等待,2 表示得到飢餓,3 表示正在吃飯*/
const
char hungry =2;
const
char dining =3;
handle hphilosopher[5]
;//定義陣列存放哲學家
handle semaphore[philosopher_num]
;// semaphore 用來表示筷子是否可用
handle mutex;
// mutex 用來控制安全輸出
dword winapi philosopherproc
(lpvoid lpparameter)
//返回 api 函式 philosopherproc
else
}break
;case dining:
//吃完了把兩根筷子放下
releasesemaphore
(semaphore[leftfork],1
,null);
releasesemaphore
(semaphore[rightfork],1
,null);
mystate = thinking;
strcpy
(statestr,
"thinking");
break;}
//輸出狀態
waitforsingleobject
(mutex, infinite)
; cout <<
"philosopher"
<< myid <<
"is:"
<< statestr << endl;
releasemutex
(mutex)
;int sleeptime;
sleeptime =1+
(int)(
5.0*
rand()
/(rand_max +
1.0));
sleep
(sleeptime *10)
;}}int
main()
for(i =
0; i < philosopher_num; i++
)sleep
(2000);
//程式執行時間
return0;
}
作業系統 哲學家進餐問題
一張圓桌上坐著5名哲學家,每兩個哲學家之間的桌上擺一根筷子,桌子的中間是一火鍋。哲學家們有思考和進餐兩個動作,哲學家在思考時,並不影響他人。只有當哲學家飢餓時,才試圖拿起左 右兩根筷子 一根一根地拿起 如果筷子已在他人手上,則需等待。飢餓的哲學家只有同時拿起兩根筷子才可以開始進餐,當進餐完畢後,放下...
作業系統中哲學家進餐問題
哲學家進餐問題 一 問題 5個哲學家圍坐在乙個圓桌上,每兩個哲學家之間都有乙隻筷子,哲學家平時進行思考,只有當他們飢餓時,才拿起筷子吃飯。規定每個哲學家只能先取其左邊筷子,然後取其右邊筷子,然後才可以吃飯。二 分析 每乙隻筷子都是乙個臨界資源,設定5個互斥訊號量。semaphore stcik 5 ...
哲學家進餐問題
哲學家進餐問題 一 問題 5個哲學家圍坐在乙個圓桌上,每兩個哲學家之間都有乙隻筷子,哲學家平時進行思考,只有當他們飢餓時,才拿起筷子吃飯。規定每個哲學家只能先取其左邊筷子,然後取其右邊筷子,然後才可以吃飯。二 分析 每乙隻筷子都是乙個臨界資源,設定5個互斥訊號量。semaphore stcik 5 ...