實(shí)驗(yàn)四,同步與互斥,Linux實(shí)驗(yàn)報(bào)告_第1頁
實(shí)驗(yàn)四,同步與互斥,Linux實(shí)驗(yàn)報(bào)告_第2頁
實(shí)驗(yàn)四,同步與互斥,Linux實(shí)驗(yàn)報(bào)告_第3頁
實(shí)驗(yàn)四,同步與互斥,Linux實(shí)驗(yàn)報(bào)告_第4頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、實(shí)驗(yàn)四,同步與互斥,linux實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)四 四 同步與互斥 【實(shí)驗(yàn)?zāi)康门c要求】 1、掌握進(jìn)程(線程)得同步與互斥。 2、掌握生產(chǎn)者消費(fèi)者問題得實(shí)現(xiàn)方法。 、掌握多線程編程方法。 【實(shí)驗(yàn)內(nèi)容】 實(shí)現(xiàn)生產(chǎn)者消費(fèi)者問題 1、有一個倉庫,生產(chǎn)者負(fù)責(zé)生產(chǎn)產(chǎn)品,并放入倉庫,消費(fèi)者會從倉庫中拿走產(chǎn)品(消費(fèi))。 、倉庫中每次只能入一個(生產(chǎn)者或消費(fèi)者). 3、倉庫中可存放產(chǎn)品得數(shù)量最多 1個,當(dāng)倉庫放滿時,生產(chǎn)者不能再放入產(chǎn)品。 4、當(dāng)倉庫空時,消費(fèi)者不能從中取出產(chǎn)品。 5、生產(chǎn)、消費(fèi)速度不同。 【實(shí)驗(yàn)原理】 1、 信號量 mu提供對緩沖池訪問得互斥要求并初始化為 1,信號量 ety與 full 分別用來

2、表示空緩沖項(xiàng)與滿緩沖項(xiàng)得個數(shù),信號量 empy 初始化為 n,信號量 fll 初始化為。 2、定義如下結(jié)構(gòu)及數(shù)據(jù): 定義緩沖區(qū)內(nèi)得數(shù)據(jù)類型:typeef in bfferem; 緩沖區(qū) :ufferitem brbfrsie; 對緩沖區(qū)操作得變量:n n,ot; 信號量 mtex 提供了對緩沖池訪問得互斥要求:pthredmuext utex; 信號量 empty 與 full 分別表示空緩沖頂與滿緩沖頂?shù)脗€數(shù):smt empty,fl; 可以設(shè)定生產(chǎn)者得生產(chǎn)速度及消費(fèi)者得消費(fèi)速度 :nt poe,cnspeed; 對緩沖區(qū)操作得自增函數(shù):#define n(k) if (k < buf

3、fersz) k k+1;ese k=0 3、并定義了如下實(shí)現(xiàn)問題得函數(shù)模塊: 將生產(chǎn)得產(chǎn)品放入緩沖區(qū): int insertm(bufferite tem) 從緩沖區(qū)內(nèi)移走一個產(chǎn)品: i remoetm(buffeite *ite) 生產(chǎn)者進(jìn)程 :void roducer(oid parm) 消費(fèi)者進(jìn)程:vid *consumer(voi parm) 生產(chǎn)者結(jié)構(gòu)進(jìn)程 消費(fèi)者結(jié)構(gòu)進(jìn)程 【程序代碼】 /s、 #inlestdio、h includestdlib、 #inclde buferitm te; int um 0; whie(1) slep(nd()(16oseed); prtf(”*第

4、%d 次生產(chǎn)*n,+num); prtf(”*等待 empy 信號*); semwait(empty); print(*等待解鎖*n); phreadmutexlock(&mt); pintf(”*上鎖,準(zhǔn)備生產(chǎn)n"); em = rnd()%100; pin("*生產(chǎn)產(chǎn)品d*n,item); nseriem(it); rintf(”*解鎖*n); pin(*第d 次生產(chǎn)結(jié)束*n,nu); pthreadutexunoc(utex); sepot(u); void cosmer(vod param) /消費(fèi)者進(jìn)程 buffrie item; t n = 0; wil

5、e(1) sleep(ad()(1coseed); prtf(*第d 次消費(fèi)*n,+nu); prnt("*等待 ful信號*"); swait(full); prntf("*等待解鎖*n”); thremutexlock(&mutex); prnf(*上鎖,準(zhǔn)備消費(fèi)*n); emovit(ie); thramtxunloc(mtex); empo(epy); pinf("*消費(fèi)產(chǎn)品d*n”,itm); rint("*解鎖*n”); pritf(”*第次消費(fèi)結(jié)束*nn,nu); in mai()/主函數(shù) phreadt id,tid2;

6、 thradttrt ttr1,atr2; sran(tim(null)); thedmxint(muex,nul);/初始化 mini(&empty,0,fesie); semnt(ll,0,); in=0; t=0; prntf("*”); rtf("*開始!*"); pritf(”*"); prinf("生產(chǎn)者速度(1-1):n"); af(",&prsd); printf("消費(fèi)者速度(1-1):n”); scanf(,onspeed); treattrinit(&attr1); p

7、trdcate(td,attr1,producer,ull); pthedttinit(&attr2); threaceat(td2,atr,consumer,null); lep(100); printf(*程序 over*n); rtrn 0; 【實(shí)驗(yàn)步驟】 編寫程序代碼 gedt sx、,再對代碼進(jìn)行編譯 g sx、c sx ptread,編譯無錯誤,進(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)體會】 1、linux 中生成線程方法: 第一種方式就是用 pthread 庫來實(shí)現(xiàn)得,就是在用戶程序本身中實(shí)現(xiàn)線程,這實(shí)際上就是

8、對線程得一種模擬,線程之間得切換與調(diào)度就是在用戶得進(jìn)程內(nèi)部進(jìn)行得,這種方式就被稱為用戶空間得線程. 這種線程得好處就是實(shí)現(xiàn)非常簡單,性能也非常好,因?yàn)榫€程之間得切換都在用戶進(jìn)程內(nèi)部進(jìn)行,切換開銷比擬小.缺點(diǎn)也非常明顯,首先就就是不能充分利用高端系統(tǒng)得p 多處理器得優(yōu)點(diǎn),因?yàn)橐粋€進(jìn)程只能由一個處理器處理,第二點(diǎn)由于用戶空間就是在用戶空間切換,某個線程遇到一個需要阻塞得系統(tǒng)調(diào)用進(jìn)而就會造成這個進(jìn)程被阻塞,因而所有線程被阻塞。 第二種方式就是通過修改良程得實(shí)現(xiàn)方式來完成,可以使用不完全得進(jìn)程創(chuàng)立方式創(chuàng)立共享數(shù)據(jù)空間得進(jìn)程,在 linux 下這種系統(tǒng)調(diào)用為 clo(). 2、tra生成線程: posix hd 簡稱為had,posix線程就是 posix 標(biāo)準(zhǔn)線程該標(biāo)準(zhǔn)定義內(nèi)部 api 創(chuàng)立與操縱線程。 數(shù)據(jù)類型 thrad: 線程句柄 heaatt: 線程屬性 線程操縱函數(shù)(省略參數(shù)): pthredcrae():創(chuàng)立一個線程 pthredexit():終止當(dāng)前線程 pthradccel():中斷另外一個線程得運(yùn)行 pheadjoin():阻塞當(dāng)前得線程,直到另外一個線程運(yùn)行結(jié)束 phredtint():初始化線程得屬性 tadattrstd

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論