作業系統第六次試驗 使用訊號量解決程序互斥訪問

2022-09-06 04:00:12 字數 1459 閱讀 5738

姓名:張越

學號: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 從鍵盤輸入 刪除 要求使用字元...