姓名:張越
學號:201821121006
班級:計算1811
一:選擇的問題:
哲學家就餐問題
關於問題的描述:
五個哲學家圍在乙個圓桌就餐,每個人都在思考結束以後進行就餐,但是每個人都必須拿起左右兩邊的兩根筷子才能用餐,當每個人都先拿起左筷子,等待右筷子的時候就會造成死鎖。
二:給出偽**:
思考結束的哲學家飢餓的等待筷子,接著先拿起左邊的筷子,再拿起右邊的筷子進行進餐。用餐結束以後釋放左右筷子,繼續進行思考
semaphore mutex=1;//互斥地取筷子三:給出全部**semaphore chopstick[5]=
while(true)}
#include#include#include#include#include#include#include#include#include#include#define err_exit(m) \四;執行結果部分截圖:程式一直在執行,說明並沒有造成死鎖do while(0)
union semun
;int semid;
#define delay (rand() % 5 + 1)
void wait_for_2fork(int no) //等待進餐
,
};semop(semid, buf, 2);
}void free_2fork(int no) //釋放資源
,
};semop(semid, buf, 2);
}void philosopere(int no)
}int main(void)
int no = 0;
pid_t pid;
for (i = 1; i < 5; i++)
}philosopere(no);
return 0;
}
五:結果分析:
哲學家就餐圖:
在一開始的時候,所有的哲學家都是在思考狀態,接著2號餓了,2號哲學家進行就餐。接著1號3號4號都等待就餐,但是因為2號哲學家正在使用1,2號筷子,所以哲學家1號跟3號缺乏左邊的筷子沒有辦法就餐,就處於等待狀態,4號哲學家開始就餐。等到2號哲學家就餐結束釋放資源(筷子),1號哲學家就開始就餐。以此類推。
由此可以看出,位置相鄰的哲學家不能同時進餐。
第六次作業
姓名 陳裕坤 學號 120705213 班級 12電信2班 作業1 總結,到目前為止,c語言基礎知識已介紹完,下一階段重點是指標。請從以下幾個方面小結 1.程式設計重在實踐,多程式設計才會對其理解更深,我是如何學習c語言的?2.程式設計涉及到方方面面知識,就像英語單詞一樣,一開始不可能了解每個c元素...
第六次作業
一 問題及 檔名稱 2.cpp 作 者 劉澤 完成日期 2017年5月18日 版 本 號 v1.0 對任務的求解方法及描述部分 輸入描述 問題描述 定義乙個不重複的有初值的10個元素的整數陣列a,利用冒泡法對陣列a排序 1 刪除x 2 插入x 程式輸出 問題分析 用迴圈結構進行編寫 演算法設計 in...
第六次實驗
一.問題給 檔名稱 第6次上機實驗 作 者 梁一意 完成日期 2017 年 5 月 5 日 版 本 號 v1.0 對任務及求解方法的描述部分 輸入描述 輸入的s為 we are the world 輸入的字元c為 w 問題描述 從字串s 從鍵盤輸入 中刪除所有的字元c 從鍵盤輸入 刪除 要求使用字元...