




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上實驗二 進(jìn)程同步一、實驗?zāi)康模赫莆栈镜耐剿惴ǎ斫饨?jīng)典進(jìn)程同步問題的本質(zhì);學(xué)習(xí)使用Linux的進(jìn)程同步機(jī)制,掌握相關(guān)API的使用方法;能利用信號量機(jī)制,采用多種同步算法實現(xiàn)不會發(fā)生死鎖的哲學(xué)家進(jìn)餐程序。二、實驗平臺:虛擬機(jī):VMWare12操作系統(tǒng):kali linux編輯器:Gedit 編譯器:Gcc三、實驗內(nèi)容:(1)以哲學(xué)家進(jìn)餐模型為依據(jù),在Linux控制臺環(huán)境下創(chuàng)建5個進(jìn)程,用semget函數(shù)創(chuàng)建一個信號量集(5個信號量,初值為1),模擬哲學(xué)家的思考和進(jìn)餐行為:每一位哲學(xué)家饑餓時,先拿起左手筷子,再拿起右手筷子;筷子是臨界資源,為每一支筷子定義1個互斥信號
2、量;想拿到筷子需要先對信號量做P操作,使用完釋放筷子對信號量做V操作。偽代碼描述:semaphore chopstick5=1,1,1,1,1; 第i位哲學(xué)家的活動可描述為: do printf(%d is thinkingn,i); printf(%d is hungryn,i); wait(chopsticki); /拿左筷子 wait(chopstick(i+1) % 5); /拿右筷子 printf(%d is eatingn,i); signal(chopsticki); /放左筷子 signal(chopstick(i+1) % 5); /放右筷子 whiletrue; 運行該組進(jìn)
3、程,觀察進(jìn)程是否能一直運行下去,若停滯則發(fā)生了什么現(xiàn)象?并分析原因。(2)解決哲學(xué)家進(jìn)餐問題可采用如下方法:a.僅當(dāng)哲學(xué)家的左、右兩只筷子均可用時,才允許他拿起筷子進(jìn)餐;b.至多只允許有4位哲學(xué)家同時去拿左邊的筷子,最終能保證至少有一位哲學(xué)家能夠進(jìn)餐;c.規(guī)定奇數(shù)號哲學(xué)家先拿起他左手的筷子,然后再拿起他右手的筷子,而偶數(shù)號哲學(xué)家則先拿起他右手的筷子,然后再拿起他左手的筷子。方法a在示例程序中給出,請用方法b和c寫出不會發(fā)生死鎖的哲學(xué)家進(jìn)餐程序。 (3)設(shè)計程序,實現(xiàn)生產(chǎn)者/消費者進(jìn)程(線程)的同步與互斥。在該程序中創(chuàng)建4個進(jìn)程(或線程)模擬生產(chǎn)者和消費者,實現(xiàn)進(jìn)程(線程)的同步與互斥。四、實驗
4、步驟:一、Linux的信號量機(jī)制為了簡化對多個信號量的操作,Linux系統(tǒng)中提出了信號量集的概念。一個信號量集對象中可以容納多個信號量,System V 信號量的分配和操作是以信號量集為單位的。1. 進(jìn)程利用信號量獲得共享資源的步驟:a.測試控制該資源的信號量;b.若信號量為正,則進(jìn)程可以使用該資源;使用資源時,進(jìn)程將該信號量減1(P操作);不再使用資源時,進(jìn)程將該信號量值加1(V操作);c.若信號量為0,則進(jìn)程進(jìn)入睡眠狀態(tài)P操作和V操作都原子操作。2. 創(chuàng)建或打開信號量集semget()系統(tǒng)調(diào)用創(chuàng)建一個新信號量集或獲取一個既有信號量集的表示符。函數(shù)原型:#include int semget
5、(key_t key, int nsems, int flag);返回值:成功返回信號量集ID,出錯返回-1。nsems信號量集中信號量個數(shù);flags:IPC_CREAT,IPC_EXCL,權(quán)限組合;第一個參數(shù)key是整數(shù)值(唯一非零),不相關(guān)的進(jìn)程可以通過它訪問一個信號量,它代表程序可能要使用的某個資源,程序?qū)λ行盘柫康脑L問都是間接的,程序先通過調(diào)用semget函數(shù)并提供一個鍵,再由系統(tǒng)生成一個相應(yīng)的信號標(biāo)識符(semget函數(shù)的返回值),只有semget函數(shù)才直接使用信號量鍵,所有其他的信號量函數(shù)使用由semget函數(shù)返回的信號量標(biāo)識符。如果多個程序使用相同的key值,key將負(fù)責(zé)協(xié)調(diào)
6、工作。第三個參數(shù)sem_flags是一組標(biāo)志,當(dāng)想要當(dāng)信號量不存在時創(chuàng)建一個新的信號量,可以和值IPC_CREAT做按位或操作。設(shè)置了IPC_CREAT標(biāo)志后,即使給出的鍵是一個已有信號量的鍵,也不會產(chǎn)生錯誤。而IPC_CREAT | IPC_EXCL則可以創(chuàng)建一個新的,唯一的信號量,如果信號量已存在,返回一個錯誤。注意:建立信號量集時每個信號量的初始值不確定。3. 信號量控制操作semctl()系統(tǒng)調(diào)用在一個信號量集或集合中的單個信號量上執(zhí)行各種控制操作。函數(shù)原型:#include int semctl (int semid, int semnum, int cmd, /*union sem
7、un arg*/)semnum:信號量編號或0,表示對指定信號量做控制操作;cmd: 操作命令,實施的控制操作;cmd參數(shù):IPC_STAT 獲取信號量集的屬性IPC_SET 設(shè)置信號量集的屬性IPC_RMID 刪除信號量集GETVAL 返回semnum信號量的值SETVAL 設(shè)置semnum信號量的值GETALL 獲取所有信號量的值SETALL 設(shè)置所有信號量的初始值第四個參數(shù)是union semununion semun int val; struct semid_ds *buf; unsigned short *array;例:定義一個信號量集,含3個信號量,初始值分別為(2,5,1)。
8、semid = semget(IPC_PRIVATE,3,IPC_CREAT|IPC_EXCL|0777);unsigned short vals3 = 2,5,1;union semnu se;se.array = vals;semclt(semid,0,SETALL,se);4. 信號量集操作semop()系統(tǒng)調(diào)用在semid標(biāo)識的信號量集中的信號量上執(zhí)行一個或多個up或down操作,可用于進(jìn)程間的同步和互斥。函數(shù)原型:#include int semop(int semid, struct sembuf *semop, size_t nops);返回:成功返回0,出錯返回-1。Struc
9、t sembufunsigned sem_num; /*member # in set*/short sem_op; /*operation(negative, 0, positive*/short sem_flg; /*IPC_NOWAIT,SEM_UNDO*/例:對上文定義的信號量集semid中的3個信號量,分別執(zhí)行如下操作:1: p(1); 2: p(3); 3: v(3);其semop的操作語句為:struct sembuf ops3 = 0, -1, SEM_UNDO, 1,-3, SEM_UNDO,2,3, SEM_UNDO;semop(semid, ops ,3);5.組合權(quán)限說
10、明0666 文件或目錄的所有者、所有者所在組、其他用戶對該對象均可讀、可寫rw-rw-rw-0777 文件或目錄的所有者、所有者所在組、其他用戶對該對象均可讀、可寫、可執(zhí)行rwxrwxrwx附:示例程序(左、右兩只筷子均可用時才允許拿起筷子)#include #include #include #include #include #include #include #include #include #include #include #include #ifdef_SEM_SEMUN_UNDEFINEDunion semunint val;struct semid_ds *buf;unsig
11、ned short *array;struct seminfo *_buf;#endif#defineERR_EXIT(m) do perror(m); exit(EXIT_FAILURE); while(0)int wait_1chopstick(int no,int semid)struct sembuf sb = no,-1,0;int ret;ret = semop(semid,&sb,1);if(ret 0) ERR_EXIT(semop);return ret;int free_1chopstick(int no,int semid)struct sembuf sb = no,1,
12、0;int ret;ret = semop(semid,&sb,1);if(ret 0) ERR_EXIT(semop);return ret;#defineDELAY (rand() % 5 + 1)void wait_for_2chopstick(int no,int semid)int left = no;int right = (no + 1) % 5;struct sembuf buf2 = left,-1,0,right,-1,0;semop(semid,buf,2);void free_2chopstick(int no,int semid)int left = no;int r
13、ight = (no + 1) % 5;struct sembuf buf2 = left,1,0,right,1,0;semop(semid,buf,2);void philosophere(int no,int semid)srand(getpid();for(;) #if 0printf(%d is thinkingn,no);sleep(DELAY);printf(%d is hungryn,no);wait_for_2chopstick(no,semid);printf(%d is eatingn,no);sleep(DELAY);free_2chopstick(no,semid);
14、#elseint left = no;int right = (no + 1) % 5;printf(%d is thinkingn,no);sleep(DELAY);printf(%d is hungryn,no);wait_1chopstick(left,semid);sleep(DELAY);wait_1chopstick(right,semid);printf(%d is eatingn,no);sleep(DELAY);free_1chopstick(left,semid); free_1chopstick(right,semid);#endifint main(int argc,char *argv)int semid;semid = semget(IPC_PRIVATE,5,IPC_CREAT | 0666);if(semid 0) ERR_EXIT(semid);u
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國配制酒(露酒)行業(yè)市場調(diào)研分析及投資戰(zhàn)略規(guī)劃報告
- 金銀花提取液項目投資可行性研究分析報告(2024-2030版)
- 2025年中國料理機(jī)市場全景評估及發(fā)展趨勢研究預(yù)測報告
- 鋁型材沖裁機(jī)行業(yè)深度研究分析報告(2024-2030版)
- 2025至2030物業(yè)管理產(chǎn)業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 2025至2030牙結(jié)石去除劑行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025至2030中國滅菌器市場運營格局與多元化發(fā)展趨勢建議報告
- 2025至2030中國混合電動手機(jī)行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025至2030中國水軟化系統(tǒng)行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025-2030年中國樓宇對講系統(tǒng)行業(yè)市場深度調(diào)研及競爭格局與投資研究報告
- 暑假提升部編版小學(xué)語文四升五暑假閱讀提升之概括文章中心思想 課件
- 2025年甘肅省隴南市事業(yè)單位招聘247人筆試參考題庫及參考答案詳解1套
- 2025至2030年中國航空發(fā)動機(jī)維修行業(yè)市場運營態(tài)勢及發(fā)展前景研判報告
- 2025深圳語文中考作文(10篇)
- 2025春學(xué)期三年級語文下冊教學(xué)工作總結(jié) (三篇)
- 2025聊城市輔警考試試卷真題
- 標(biāo)準(zhǔn)文本-《水運工程大臨建設(shè)標(biāo)準(zhǔn)化指南》
- 2025-2030IVD原酶料市場發(fā)展態(tài)勢剖析及未來需求趨勢預(yù)測研究報告
- 基于單片機(jī)的智能臺燈控制系統(tǒng)的設(shè)計14000字【論文】
- 2025廣西專業(yè)技術(shù)人員公需科目培訓(xùn)考試答案
評論
0/150
提交評論