多執行緒之哲學家就餐問題

2021-06-29 00:18:46 字數 1410 閱讀 6337

該問題的描述是:五個哲學家共用一張圓桌,分別坐在周圍的5張椅子上,在圓桌上有5個碗和5只筷子,,他們的生活方式是交替進行思考和進餐,平時,乙個哲學家進行思考和飢餓,平時,乙個哲學家進行思考,飢餓的時候便試圖取用其作用最靠近的筷子,只有在他拿到兩至筷子時才能進餐,進餐完畢,放下筷子進行思考

現在呢:我們使用的源**如下:

// 哲學家.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

int _tmain(int argc, _tchar* argv)

///檔案描述:哲學家就餐問題,共有5個哲學家,坐成乙個環,兩個哲學家之間有

/// 一根筷子,每個哲學家有兩根筷子才能吃飯,放下筷子就只能思考

/// 我們可以認為建立有5個執行緒,表示5個哲學家,因為有5跟筷子,所

/// 以,當每個人一根筷子,則會產生死鎖,我們設定最多有4個人同時

// 就餐

#include#includeusing namespace std;

#define physical 5

handle hmutext[physical]=;

int index=0;

dword dinner(lpvoid param )

///檔案描述:哲學家就餐問題,共有5個哲學家,坐成乙個環,兩個哲學家之間有

/// 一根筷子,每個哲學家有兩根筷子才能吃飯,放下筷子就只能思考

/// 我們可以認為建立有5個執行緒,表示5個哲學家,因為有5跟筷子,所

/// 以,當每個人一根筷子,則會產生死鎖,我們設定最多有4個人同時

// 就餐

#include#includeusing namespace std;

#define physical 5

handle hmutext[physical]=;

int index=0;

int *physical;

dword dinner(lpvoid param )

{ int* current=(int*)param;

while(1)

{ if(((index>=*current)&&(index-*current)<=3)||(index<*current)&&(*current-index<=3))

{ //可以進行嘗試就餐了

::waitforsingleobject(hmutext[*current],infinite);

::waitforsingleobject(hmutext[(*current+1)%physical],infinite);

cout<<"哲學家"<<*current<<"正在就餐\n";

index=(index+1)%physical;

cout<<"當前索引是:"<

多執行緒之哲學家就餐問題

哲學家就餐問題是1965年由dijkstra提出的一種執行緒同步的問題。問題描述 一圓桌前坐著5位哲學家,兩個人中間有乙隻筷子,桌子 有麵條。哲學家思考問題,當餓了的時候拿起左右兩隻筷子吃飯,必須拿到兩隻筷子才能吃飯。上述問題會產生死鎖的情況,當5個哲學家都拿起自己左手邊的筷子,準備拿右手邊的筷子時...

多執行緒 哲學家就餐問題

1 當哲學家的左右筷子均是可用的時候才能就餐,否則等待,很容易理解,一次最多能有兩個人同時就餐 public class philosophereating 當前執行緒組活動執行緒數 while thread.activecount 1 catch interruptedexception ex 哲...

多執行緒 哲學家就餐問題

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