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

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

ID:47457219

大?。?38.50 KB

頁(yè)數(shù):24頁(yè)

時(shí)間:2020-01-11

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

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

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

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

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

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

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

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

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

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

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

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