91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 3KB
    文件類型: .cpp
    金幣: 1
    下載: 0 次
    發(fā)布日期: 2023-12-04
  • 語言: C/C++
  • 標簽: 操作系統(tǒng)??

資源簡介

哲學家進餐問題的c++模擬實現(xiàn),避免死鎖的方法是奇數(shù)號哲學家先拿右邊的筷子,偶數(shù)號先那左邊的筷子,有詳盡的注釋。

資源截圖

代碼片段和文件信息

/*
哲學家進餐問題
規(guī)定:奇數(shù)號哲學家先拿起右邊筷子,然后再去拿左邊筷子,而偶數(shù)號哲學家相反
目的:防止死鎖
*/

#include
#include
#include
using?namespace?std;
#define?NUM?5??????????????//哲學家和筷子數(shù)目
mutex?mtx;

int?sequence[5];//用于保存進餐順序
int?m?=?0;
bool?chopstick[5]?=?{11111};//記錄型信號量
int?semaphore?=?5;//設置信號量

void?show()
{//顯示shopstick[]的狀態(tài)
mtx.lock();
for?(int?i?=?0;?i? {
cout?< }
cout?< mtx.unlock();
}

void?P(int?i)
{
/*if?(chopstick[i]==0)
{//信號量小于0則中斷
this_thread::sleep_for(chrono::seconds(1));
}
else
{
chopstick[i]?=?0;//設置i號筷子為不可用
semaphore--;//信號量減一
}
*/

while?(chopstick[i]?==?0)
{//如果拿不到筷子就進入等待隊列
this_thread::sleep_for(chrono::seconds(1));
}
chopstick[i]?=?0;//設置i號筷子為不可用
semaphore--;//信號量減一
//show();
}

void?V(int?i)
{
chopstick[i]?=?1;//設置i號筷子為可用
semaphore++;
//show();
}

void?think(int?i)
{
cout?<}

void?eat(int?i)
{
mtx.lock();
cout?< mtx.unlock();
}

void?meal(int?i)
{
if?(i?%?2?==?0)???????????????//偶數(shù)號哲學家??
{
P(i);??//拿起左邊的筷子??
//mtx.lock();
????cout?< //mtx.unlock();
P((i?+?1)?%?5);//拿起右邊的筷子??
//mtx.lock();
????????????cout?< //mtx.unlock();
eat(i);??//左右都得到筷子則吃飯??
V(i);???//釋放左邊信號量??

評論

共有 條評論

相關資源