昨天晚上本來打算買奶茶,忽然晴天霹靂聽說實驗二不可以不用訊號量,趕回去肝了。感謝舍友給我講了下思路。
簡單來說就是把doctor設成訊號量,每次看病sem_wait減一看完sem_post加一。
糟糕的點在於昨晚倒霉病人沒地方坐沒醫生看病就滾回家再也沒回來了,後來我用了個迴圈。
分三種情況討論就好,椅子我沒設成訊號量。
講真這個訊號量意義在**啊啊啊啊啊啊啊啊啊啊!!!!!(土拔鼠尖叫)
說是其實lock1可以不要,doctor是個訊號量了。。。不過昨晚沒來得及試一試就被清場了。。。
可能以後有空了改一下寫寫注釋。
#include
#include
#include
#include
#include
#define n 5
//num of patients
#define m 1
//num of doctors
#define chairs 3
//num of chairs
pthread_mutex_t mutex;
int people=0;
//number of the patients already here
sem_t sem;
void
*doctor
(void
*var)
else
if(people)
pthread_mutex_lock
(&mutex)
;//鎖上
sem_post
(&sem)
;//訊號量加一
people--
;//病人數減一
pthread_mutex_unlock
(&mutex)
;sleep(5
);}}
return
null;}
void
*patient
(void
*var)
if(people >
0&& people <= chairs)
else
if(people>chairs)
//人多,走了
return
null;}
intmain()
for(i=
0;i)for
(i =
0; i < n; i++
)for
(i =
0; i < m; i++
)sleep
(rand()
%20);
//為了列印出來好看可以sleep乙個random
exit(0
);}
OS 2019第二次實驗
2 編寫程式,首先使用fork系統呼叫,建立子程序 3 使用fork系統呼叫,建立如下程序樹 4 採用不同方式終止p2程序 首先我們用ps c vi命令,即可實現只顯示名字為vi的程序。之後我們利用ps ef grep pid,逐步查詢。直到init程序,在這個結果中,第二列為當前程序的pid,第三...
OS實驗一 作業系統的引導
草,我還以為延時要付費呢 下面將給出一些更具體的 提示 這些提示並不是實驗的一步一步的指導,而是羅列了一些實驗中可能遇到的困難,並給予相關提示。它們肯定不會涵蓋所有問題,也不保證其中的每個字都對完成實驗有幫助。所以,它們更適合在你遇到問題時查閱,而不是當作指南一樣地亦步亦趨。本課程所有實驗的提示都是...
OS實驗一 作業系統的引導
草,我還以為延時要付費呢 下面將給出一些更具體的 提示 這些提示並不是實驗的一步一步的指導,而是羅列了一些實驗中可能遇到的困難,並給予相關提示。它們肯定不會涵蓋所有問題,也不保證其中的每個字都對完成實驗有幫助。所以,它們更適合在你遇到問題時查閱,而不是當作指南一樣地亦步亦趨。本課程所有實驗的提示都是...