版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)四 同步與互斥 【實(shí)驗(yàn)?zāi)康暮鸵蟆?、掌握進(jìn)程(線程)的同步與互斥。2、掌握生產(chǎn)者消費(fèi)者問題的實(shí)現(xiàn)方法。3、掌握多線程編程方法。【實(shí)驗(yàn)內(nèi)容】實(shí)現(xiàn)生產(chǎn)者消費(fèi)者問題1、有一個(gè)倉庫,生產(chǎn)者負(fù)責(zé)生產(chǎn)產(chǎn)品,并放入倉庫,消費(fèi)者會(huì)從倉庫中拿走產(chǎn)品(消費(fèi))。2、倉庫中每次只能入一個(gè)(生產(chǎn)者或消費(fèi)者)。3、倉庫中可存放產(chǎn)品的數(shù)量最多10個(gè),當(dāng)倉庫放滿時(shí),生產(chǎn)者不能再放入產(chǎn)品。4、當(dāng)倉庫空時(shí),消費(fèi)者不能從中取出產(chǎn)品。5、生產(chǎn)、消費(fèi)速度不同?!緦?shí)驗(yàn)原理】1、 信號(hào)量mutex提供對(duì)緩沖池訪問的互斥要求并初始化為1,信號(hào)量empty和full分別用來表示空緩沖項(xiàng)和滿緩沖項(xiàng)的個(gè)數(shù),信號(hào)量empty初始化為n,信號(hào)量
2、full初始化為0。2、定義如下結(jié)構(gòu)及數(shù)據(jù):定義緩沖區(qū)內(nèi)的數(shù)據(jù)類型:typedefintbuffer_item;緩沖區(qū):buffer_itembufferBUFFER_SIZE;對(duì)緩沖區(qū)操作的變量:intin,out;信號(hào)量mutex提供了對(duì)緩沖池訪問的互斥要求:pthread_mutex_tmutex;信號(hào)量empty和full分別表示空緩沖頂和滿緩沖頂?shù)膫€(gè)數(shù):sem_tempty,full;可以設(shè)定生產(chǎn)者的生產(chǎn)速度及消費(fèi)者的消費(fèi)速度:intpro_speed,con_speed;對(duì)緩沖區(qū)操作的自增函數(shù):#defineinc(k)if(kBUFFER_SIZE)k=k+1;elsek=03、
3、并定義了如下實(shí)現(xiàn)問題的函數(shù)模塊:將生產(chǎn)的產(chǎn)品放入緩沖區(qū):intinsert_item(buffer_itemitem)從緩沖區(qū)內(nèi)移走一個(gè)產(chǎn)品:intremove_item(buffer_item*item)生產(chǎn)者進(jìn)程:void*producer(void*param)消費(fèi)者進(jìn)程:void*consumer(void*param)生產(chǎn)者結(jié)構(gòu)進(jìn)程 消費(fèi)者結(jié)構(gòu)進(jìn)程【程序代碼】/sx.c#include#include#include#include#include#define inc(k) if(kBUFFER_SIZE) k=k+1;else k=0#define BUFFER_SIZE 10/
4、緩沖區(qū)的大小typedef int buffer_item;/定義緩沖區(qū)內(nèi)的數(shù)據(jù)類型buffer_item bufferBUFFER_SIZE;/緩沖區(qū)int in,out;/對(duì)緩沖區(qū)操作的變量pthread_mutex_t mutex;/信號(hào)量mutex提供了對(duì)緩沖池訪問的互斥要求sem_t empty,full;/信號(hào)量empty和full分別表示空緩沖頂和滿緩沖頂?shù)膫€(gè)數(shù)int pro_speed,con_speed;/可以設(shè)定生產(chǎn)者的生產(chǎn)速度及消費(fèi)者的消費(fèi)速度int insert_item(buffer_item item)/將生產(chǎn)的產(chǎn)品放入緩沖區(qū)bufferin=item;printf
5、(*insert緩沖池第%d號(hào)*n,in);inc(in);int remove_item(buffer_item *item)/從緩沖區(qū)內(nèi)移走一個(gè)產(chǎn)品*item = bufferout;printf(*remove緩沖池第%d號(hào)*n,out);inc(out);void *producer(void *param)/生產(chǎn)者進(jìn)程buffer_item item;int num = 0;while(1)sleep(rand()%(16-pro_speed);printf(n*第%d次生產(chǎn)*n,+num);printf(*等待empty信號(hào)*n);sem_wait(&empty);printf(*
6、等待解鎖*n);pthread_mutex_lock(&mutex);printf(*上鎖,準(zhǔn)備生產(chǎn)*n);item = rand()%1000+1; printf(*生產(chǎn)產(chǎn)品%d*n,item);insert_item(item);printf(*解鎖*n);printf(*第%d次生產(chǎn)結(jié)束*nn,num);pthread_mutex_unlock(&mutex);sem_post(&full);void *consumer(void *param)/消費(fèi)者進(jìn)程buffer_item item;int num = 0;while(1)sleep(rand()%(16-con_speed);p
7、rintf(n*第%d次消費(fèi)*n,+num);printf(*等待full信號(hào)*n);sem_wait(&full);printf(*等待解鎖*n);pthread_mutex_lock(&mutex);printf(*上鎖,準(zhǔn)備消費(fèi)*n);remove_item(&item);pthread_mutex_unlock(&mutex);sem_post(&empty);printf(*消費(fèi)產(chǎn)品%d*n,item);printf(*解鎖*n);printf(*第%d次消費(fèi)結(jié)束*nn,num); int main()/主函數(shù)pthread_t tid1,tid2;pthread_attr_t at
8、tr1,attr2;srand(time(NULL);pthread_mutex_init(&mutex,NULL);/初始化sem_init(&empty,0,BUFFER_SIZE);sem_init(&full,0,0);in=0;out=0;printf(*n);printf(*開始!*n);printf(*n);printf(生產(chǎn)者速度(1-15):n);scanf(%d,&pro_speed);printf(消費(fèi)者速度(1-15):n);scanf(%d,&con_speed);pthread_attr_init(&attr1);pthread_create(&tid1,&attr
9、1,producer,NULL);pthread_attr_init(&attr2);pthread_create(&tid2,&attr2,consumer,NULL);sleep(100);printf(*程序over*n);return 0;【實(shí)驗(yàn)步驟】編寫程序代碼gedit sx.c,再對(duì)代碼進(jìn)行編譯gcc sx.c o sx lpthread,編譯無錯(cuò)誤,進(jìn)行運(yùn)行./sx,根據(jù)提示要求進(jìn)行填寫生產(chǎn)者和消費(fèi)速度,觀察消費(fèi)者和生產(chǎn)者進(jìn)程?!緦?shí)驗(yàn)結(jié)果】【實(shí)驗(yàn)體會(huì)】1、Linux中生成線程方法: 第一種方式是用pthread 庫來實(shí)現(xiàn)的,是在用戶程序本身中實(shí)現(xiàn)線程,這實(shí)際上是對(duì)線程的一種模擬
10、,線程之間的切換和調(diào)度是在用戶的進(jìn)程內(nèi)部進(jìn)行的,這種方式就被稱為用戶空間的線程。這種線程的好處是實(shí)現(xiàn)非常簡(jiǎn)單,性能也非常好,因?yàn)榫€程之間的切換都在用戶進(jìn)程內(nèi)部進(jìn)行,切換開銷比較小。缺點(diǎn)也非常明顯,首先就是不能充分利用高端系統(tǒng)的SMP多處理器的優(yōu)點(diǎn),因?yàn)橐粋€(gè)進(jìn)程只能由一個(gè)處理器處理,第二點(diǎn)由于用戶空間是在用戶空間切換,某個(gè)線程遇到一個(gè)需要阻塞的系統(tǒng)調(diào)用進(jìn)而就會(huì)造成這個(gè)進(jìn)程被阻塞,因而所有線程被阻塞。 第二種方式是通過修改進(jìn)程的實(shí)現(xiàn)方式來完成,可以使用不完全的進(jìn)程創(chuàng)建方式創(chuàng)建共享數(shù)據(jù)空間的進(jìn)程,在Linux下這種系統(tǒng)調(diào)用為clone()。2、Ptrtead生成線程: POSIX thread簡(jiǎn)稱為pthread,Posix線程是POSIX標(biāo)準(zhǔn)線程該標(biāo)準(zhǔn)定義內(nèi)部API創(chuàng)建和操縱線程。 數(shù)據(jù)類型 pthread_t:線程句柄 pthread_attr_t:線程屬性 線程操縱函數(shù)(省略參數(shù)):pthread_create():創(chuàng)建一個(gè)線程 pthread_exit():終止當(dāng)前線程 pthread_cancel():中斷另外一個(gè)線程的運(yùn)行 pthread_join():阻塞當(dāng)前的線程,直到另外一個(gè)線程運(yùn)行結(jié)束 pthread_att
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年技術(shù)工人勞動(dòng)協(xié)議范本
- 安全標(biāo)準(zhǔn)化示范班組評(píng)定標(biāo)準(zhǔn)和考評(píng)細(xì)則考核試卷
- 團(tuán)隊(duì)合作與溝通技巧培訓(xùn)課件考核試卷
- 2024協(xié)議檔案管理執(zhí)行規(guī)定
- 醫(yī)院環(huán)境清潔與消毒標(biāo)準(zhǔn)考核試卷
- 《ZS東北公司內(nèi)部控制環(huán)境案例研究》
- 《類風(fēng)濕關(guān)節(jié)炎與血脂代謝異常的相關(guān)性研究》
- 危險(xiǎn)源辨識(shí)與評(píng)估在核電站的應(yīng)用考核試卷
- 《我國(guó)S6級(jí)殘疾人游泳運(yùn)動(dòng)員江福英仰泳技術(shù)的運(yùn)動(dòng)學(xué)特征分析》
- 2024至2030年中國(guó)低焦油卷煙香精數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 山東省青島實(shí)驗(yàn)中學(xué)2024-2025學(xué)年七年級(jí)上學(xué)期期中考試數(shù)學(xué)試題(無答案)
- 2024年安能物流合作加盟協(xié)議版
- 質(zhì)量管理體系過程方法和風(fēng)險(xiǎn)思維專業(yè)解讀與應(yīng)用之7:5 領(lǐng)導(dǎo)作用-5.3組織的崗位、職責(zé)和權(quán)限(雷澤佳編制-2024B1)
- 地面找平專項(xiàng)施工方案
- 初三化學(xué)-水的凈化省公開課獲獎(jiǎng)?wù)n件說課比賽一等獎(jiǎng)?wù)n件
- 2024-2030年中國(guó)財(cái)稅服務(wù)行業(yè)市場(chǎng)深度調(diào)研及發(fā)展前景與投資研究報(bào)告
- 第二次月考卷-2024-2025學(xué)年統(tǒng)編版語文六年級(jí)上冊(cè)
- 申論國(guó)家公務(wù)員考試試題與參考答案
- 亂扔垃圾的課件
- 北京市房山區(qū)2023-2024學(xué)年高二上學(xué)期期中地理試題 含解析
- 期刊編輯的學(xué)術(shù)期刊版權(quán)教育與培訓(xùn)考核試卷
評(píng)論
0/150
提交評(píng)論