操作系統(tǒng)-創(chuàng)建線程,利用互斥實現(xiàn)線程共享變量通信

操作系統(tǒng)-創(chuàng)建線程,利用互斥實現(xiàn)線程共享變量通信

ID:47457219

大小:238.50 KB

頁數(shù):24頁

時間:2020-01-11

操作系統(tǒng)-創(chuàng)建線程,利用互斥實現(xiàn)線程共享變量通信_第1頁
操作系統(tǒng)-創(chuàng)建線程,利用互斥實現(xiàn)線程共享變量通信_第2頁
操作系統(tǒng)-創(chuàng)建線程,利用互斥實現(xiàn)線程共享變量通信_第3頁
操作系統(tǒng)-創(chuàng)建線程,利用互斥實現(xiàn)線程共享變量通信_第4頁
操作系統(tǒng)-創(chuàng)建線程,利用互斥實現(xiàn)線程共享變量通信_第5頁
資源描述:

《操作系統(tǒng)-創(chuàng)建線程,利用互斥實現(xiàn)線程共享變量通信》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫

1、創(chuàng)建線程,利用互斥實現(xiàn)線程共享變量通信一.概述1.1課題目的和意義掌握線程創(chuàng)建和終止,加深對線程和進(jìn)程概念的理解,會用同步與互斥方法實現(xiàn)線程之間的通信。1.2內(nèi)容和要求軟件界面上點“創(chuàng)建線程”按鈕,創(chuàng)建三個生產(chǎn)者線程(P1,P2,P3)和兩個消費者線程(C1,C2),生產(chǎn)者和消費者線程共享一個長度為2KB的環(huán)型公共緩沖區(qū),生產(chǎn)者向其中投放消息,消費者從中取走消息。只要緩沖區(qū)未滿,生產(chǎn)者可將消息送入緩沖區(qū);只要緩沖區(qū)未空,消費者可從緩沖區(qū)取走一個消息。每個消息具下列結(jié)構(gòu)格式:消息頭(1B,固定為0xaa),消息長度(1B),消息內(nèi)容(nB),校驗和(1B),檢驗和計算方式

2、為消息長度和消息內(nèi)容所有字節(jié)異或結(jié)果。每個生產(chǎn)者每隔n毫秒(n用隨機(jī)數(shù)產(chǎn)生,1到100毫秒之間,間隔不固定)生產(chǎn)一個消息加入緩沖區(qū),并把消息產(chǎn)生時間和內(nèi)容記錄在一個文本文件中(或顯示在列表框中)。P1每次生產(chǎn)的數(shù)據(jù)為26個大寫字母,P2每次生產(chǎn)的數(shù)據(jù)為26個小寫字母,P3每次生產(chǎn)的數(shù)據(jù)為10個數(shù)字。每個消費者每隔n秒(n用隨機(jī)數(shù)產(chǎn)生,1到5秒之間,間隔不固定)從緩沖區(qū)取走一個消息。每消費一個消息需要將消費時間和消息內(nèi)容記錄在一個文本文件中(或顯示在列表框中)。當(dāng)用戶按結(jié)束按鈕時結(jié)束5個線程,并將5個文件內(nèi)容顯示出來進(jìn)行對照。這期實是一個經(jīng)典的生產(chǎn)者—消費者(Produc

3、er_consumer)進(jìn)程(線程)同步的問題。它描述的是:有一群生產(chǎn)者進(jìn)程在生產(chǎn)產(chǎn)品,并將此產(chǎn)品提供給消費者進(jìn)程(線程)去消費。為使生產(chǎn)者進(jìn)程和消費者進(jìn)程(線程)能并發(fā)執(zhí)行,在它們之間設(shè)置有個緩沖區(qū)的緩沖池,生產(chǎn)者進(jìn)程(線程)可將它所生產(chǎn)的產(chǎn)品放入一個緩沖區(qū)中,消費者進(jìn)程(線程)可從一個緩沖區(qū)取得一個產(chǎn)品消費。盡管所有的生產(chǎn)者進(jìn)程和消費者進(jìn)程(線程)都是以異步的方式運行的,但它們之間必須保持同步,即不允許消費者進(jìn)程(線程)到一個空緩沖區(qū)去取產(chǎn)品,也不允許生產(chǎn)者進(jìn)程(線程)向一個已裝有消息尚未被取走產(chǎn)品的緩沖區(qū)投放產(chǎn)品。如下圖所示:1.3線程所采用的同步方法同步是多線程

4、中的重要概念.同步的使用可以保證在多線程運行的環(huán)境中,程充不會產(chǎn)生設(shè)計之外的結(jié)果.同步的實現(xiàn)方式有兩種,同步方法和同步塊.線程在執(zhí)行同步方法是具有排它性的.當(dāng)任意一個線和進(jìn)入到一個對象的任意一個同步方法時,這個對象所有同步方法都被鎖定,在些期間,期他任何線程都不能訪問這個對象的任意一個同步方法,直到這個線程執(zhí)行完它所調(diào)用的同步方法并從中退出,從而導(dǎo)至它釋放了該對象的同步鎖這后.在一個對象被某個線程鎖定之后,其他線程是可以訪問.同步的有幾種實現(xiàn)方法,分別是:wait():使一個線程處于等待狀態(tài),并且釋放所有持有的對象lock.sleep():使一個正在運行的線程處于睡眠狀

5、態(tài),是一個靜態(tài)方法,調(diào)用此方法要捕捉InterruptedException異常。notify():喚醒一個處于等待狀態(tài)的線程,注意的是在調(diào)用此方法的時候,并不能確切的喚醒某一個等待狀態(tài)的線程,而是由JVM確定喚醒哪個線程,而且不是按優(yōu)先級。Allnotity():喚醒所有處入等待狀態(tài)的線程,注意并不是給所有喚醒線程一個對象的鎖,而是讓它們競爭。1.4開發(fā)工具平臺開發(fā)平臺:windowXP開發(fā)工具:VC++一.數(shù)據(jù)定義和詳細(xì)說明1數(shù)據(jù)定義設(shè)計PV操作算法,用信號量機(jī)制實現(xiàn)生產(chǎn)者與消費者同步與互斥問題,并與無PV情況下進(jìn)行對比。定義20個緩沖區(qū),將其初始化為0。調(diào)用隨機(jī)函

6、數(shù)rand()生成隨機(jī)數(shù),把隨機(jī)數(shù)通過生產(chǎn)者放入緩沖區(qū)。若緩沖區(qū)滿則其值非0。當(dāng)消費者從緩沖區(qū)中去數(shù)后緩沖區(qū)值變?yōu)?。程序可顯示緩沖區(qū)中的全部內(nèi)容,方便觀察生產(chǎn)者與消費者的行為。程序可通過設(shè)置sleep(time)中time的值來控制生產(chǎn)者與消費者的執(zhí)行順序。2詳細(xì)說明為了實現(xiàn)生產(chǎn)者與消費者同步與互斥的問題,該程序用記錄型信號量機(jī)制來實現(xiàn)。假定在生產(chǎn)者與消費者之間,利用一個公共的緩沖池來進(jìn)行通信,生產(chǎn)者將所生產(chǎn)的信息放入其中,消費者cognitive緩沖池中取得消息來消費,該緩沖池具有n個緩沖區(qū),其編號為0,1,2,3···,n-1;設(shè)置一個互斥信號量mutex,用于實

7、現(xiàn)諸進(jìn)程對緩沖池的互斥使用,其初值為1,利用資源信號量empty,表示緩沖池中空緩沖區(qū)的數(shù)目,其初值為n;full分別表示緩沖池中滿緩沖區(qū)的數(shù)目,其初值為0.又假定這些生產(chǎn)者和消費者相互等效,只要緩沖池未滿,生產(chǎn)者便可將消息送入由指針in所指的緩沖區(qū);只要緩沖池未空,消費者變可以從由指針out所指示的緩沖區(qū)中,取走一個消息。對生產(chǎn)者消費者的問題可以描述如下:Varmetux,empty,full:semaphore=1,n,0;Buffer:array[0,···n-1]ofitem;In,out:integer:=0;Begin:Pab

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。