操作系統(tǒng)進(jìn)程同步和互斥的實(shí)驗(yàn)報(bào)告_第1頁(yè)
操作系統(tǒng)進(jìn)程同步和互斥的實(shí)驗(yàn)報(bào)告_第2頁(yè)
操作系統(tǒng)進(jìn)程同步和互斥的實(shí)驗(yàn)報(bào)告_第3頁(yè)
操作系統(tǒng)進(jìn)程同步和互斥的實(shí)驗(yàn)報(bào)告_第4頁(yè)
操作系統(tǒng)進(jìn)程同步和互斥的實(shí)驗(yàn)報(bào)告_第5頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上湖南農(nóng)業(yè)大學(xué)信息科學(xué)技術(shù)學(xué)院學(xué) 生 實(shí) 驗(yàn) 報(bào) 告姓名: 年級(jí)專業(yè)班級(jí) 日期 2008 年 11 月 25日 成績(jī) 課程名稱操作系統(tǒng)實(shí)驗(yàn)名稱進(jìn)程同步和互斥 實(shí)驗(yàn)類型驗(yàn)證 設(shè)計(jì)綜合 創(chuàng)新【實(shí)驗(yàn)?zāi)康?、要求】?)通過(guò)編寫(xiě)程序?qū)崿F(xiàn)進(jìn)程同步和互斥,掌握有關(guān)進(jìn)程(線程)同步與互斥的原理,以及解決進(jìn)程(線程)同步和互斥的算法,從而進(jìn)一步鞏固進(jìn)程(線程)同步和互斥等有關(guān)的內(nèi)容。(2)了解Windows2000/XP中多線程的并發(fā)執(zhí)行機(jī)制,線程間的同步和互斥。(3)學(xué)習(xí)使用Windows2000/XP中基本的同步對(duì)象,掌握相應(yīng)的API函數(shù)。(4)掌握進(jìn)程和線程的概念,進(jìn)程(線程)的控

2、制原語(yǔ)或系統(tǒng)調(diào)用的使用?!緦?shí)驗(yàn)內(nèi)容】在Windows XP操作系統(tǒng)下,使用java等編程語(yǔ)言,采用進(jìn)程(線程)同步和互斥的技術(shù)編寫(xiě)程序?qū)崿F(xiàn)生產(chǎn)者-消費(fèi)者問(wèn)題?!緦?shí)驗(yàn)環(huán)境】(含主要設(shè)計(jì)設(shè)備、器材、軟件等)裝有JDK1.6 的PC電腦一臺(tái)【實(shí)驗(yàn)步驟、過(guò)程】(含原理圖、流程圖、關(guān)鍵代碼,或?qū)嶒?yàn)過(guò)程中的記錄、數(shù)據(jù)等)生產(chǎn)者進(jìn)程(進(jìn)程由多個(gè)線程組成)生產(chǎn)信息,例如它可以是計(jì)算進(jìn)程。消費(fèi)者進(jìn)程使用信息,它可以是輸出打印進(jìn)程。由于生產(chǎn)者和消費(fèi)者彼此獨(dú)立,且運(yùn)行速度不確定,所以很可能出現(xiàn)生產(chǎn)者已產(chǎn)生了信息而消費(fèi)者卻沒(méi)有來(lái)得及接受信息這種情況。為此,需要引入由一個(gè)或者若干個(gè)存儲(chǔ)單元組成的臨時(shí)存儲(chǔ)區(qū),以便存放生產(chǎn)

3、者所產(chǎn)生的信息,平滑進(jìn)程間由于速度不確定所帶來(lái)的問(wèn)題。這個(gè)臨時(shí)存儲(chǔ)區(qū)叫做緩沖區(qū),通常用一維數(shù)組來(lái)表示。由一個(gè)或若干個(gè)存儲(chǔ)單元組成的緩沖區(qū)叫作“有窮緩沖區(qū)”。下面我們來(lái)分 析一下有窮緩沖的生產(chǎn)者和消費(fèi)者的例子。生產(chǎn)者緩沖池消費(fèi)者放入產(chǎn)品獲取緩沖區(qū)情況取出產(chǎn)品獲取緩沖區(qū)情況原理圖假設(shè)有多個(gè)生產(chǎn)者和多個(gè)消費(fèi)者,它們共享一個(gè)具有n個(gè)存儲(chǔ)單元的有窮緩沖區(qū)Buffer(0n-1),這 是一個(gè)環(huán)形隊(duì)列。其隊(duì)尾指針Rear指向當(dāng)前信息應(yīng)存放的位置(BufferRear),隊(duì)首指針Front指向當(dāng)前 取出信息的位置(Bufferfront)。生產(chǎn)者進(jìn)程總是把信息存放在BufferRear中,消費(fèi)者進(jìn)程則總是從

4、Buffer Rear中取出信息。如果想使生產(chǎn)者進(jìn)程和消費(fèi)者進(jìn)程協(xié)調(diào)合作,則必須使它們 遵循如下規(guī)則: 1) 只要緩沖區(qū)有存儲(chǔ)單元,生產(chǎn)者都可往其中存放信息;當(dāng)緩沖區(qū)已滿時(shí),若任意生產(chǎn)者提出寫(xiě)要求,則都必須等待; 2) 只要緩沖區(qū)中有消息可取,消費(fèi)者都可從緩沖區(qū)中取出消息;當(dāng)緩沖區(qū)為空時(shí),若任意消費(fèi)者想取出信息,則必須等待; 3) 生產(chǎn)者們和消費(fèi)者們不能同時(shí)讀、寫(xiě)緩沖區(qū)。開(kāi)始生產(chǎn)者線程開(kāi)始消費(fèi)者線程開(kāi)始是放入產(chǎn)品到緩沖池判斷緩沖池是否滿了判斷緩沖池能否放下新產(chǎn)品否是否是從緩沖池中取出產(chǎn)品判斷緩沖池是否空判斷緩沖池中產(chǎn)品夠不夠取否是否通過(guò)notify()喚醒消費(fèi)者線程,而生產(chǎn)者線程阻塞通過(guò)not

5、ify()喚醒生產(chǎn)者線程,而消費(fèi)者線程阻塞在實(shí)際運(yùn)行中,生產(chǎn)者和消費(fèi)者兩個(gè)線程的最開(kāi)始的運(yùn)行是沒(méi)有先后之分的,兩個(gè)線程處于同時(shí)執(zhí)行的狀態(tài)。流程圖代碼: public class ProducerConsumer public static void main(String args) SyncStack ss = new SyncStack(); Producer p = new Producer(ss); Consumer c = new Consumer(ss); new Thread(p).start(); new Thread(p).start(); new Thread(p).sta

6、rt(); new Thread(c).start(); class WoTou int id; WoTou(int id) this.id = id; public String toString() return "WoTou : " + id; class SyncStack int index = 0; WoTou arrWT = new WoTou6; public synchronized void push(WoTou wt) while(index = arrWT.length) try this.wait(); catch (InterruptedExce

7、ption e) e.printStackTrace(); this.notifyAll(); arrWTindex = wt; index +; public synchronized WoTou pop() while(index = 0) try this.wait(); catch (InterruptedException e) e.printStackTrace(); this.notifyAll(); index-; return arrWTindex; class Producer implements Runnable SyncStack ss = null; Produce

8、r(SyncStack ss) this.ss = ss; public void run() for(int i=0; i<20; i+) WoTou wt = new WoTou(i); ss.push(wt);System.out.println("生產(chǎn)了:" + wt); try Thread.sleep(int)(Math.random() * 200); catch (InterruptedException e) e.printStackTrace(); class Consumer implements Runnable SyncStack ss =

9、null; Consumer(SyncStack ss) this.ss = ss; public void run() for(int i=0; i<20; i+) WoTou wt = ss.pop();System.out.println("消費(fèi)了: " + wt); try Thread.sleep(int)(Math.random() * 1000); catch (InterruptedException e) e.printStackTrace(); 結(jié)果:(隨機(jī)的)生產(chǎn)了:WoTou : 0生產(chǎn)了:WoTou : 0消費(fèi)了: WoTou : 0生產(chǎn)了:

10、WoTou : 1生產(chǎn)了:WoTou : 1生產(chǎn)了:WoTou : 1生產(chǎn)了:WoTou : 2生產(chǎn)了:WoTou : 3消費(fèi)了: WoTou : 2消費(fèi)了: WoTou : 3生產(chǎn)了:WoTou : 4消費(fèi)了: WoTou : 4生產(chǎn)了:WoTou : 5消費(fèi)了: WoTou : 5生產(chǎn)了:WoTou : 6消費(fèi)了: WoTou : 6生產(chǎn)了:WoTou : 2消費(fèi)了: WoTou : 2生產(chǎn)了:WoTou : 3消費(fèi)了: WoTou : 3生產(chǎn)了:WoTou : 4消費(fèi)了: WoTou : 4生產(chǎn)了:WoTou : 5消費(fèi)了: WoTou : 5生產(chǎn)了:WoTou : 6消費(fèi)了: WoTou : 6【實(shí)驗(yàn)結(jié)果或總結(jié)】(對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行相應(yīng)分析,或總結(jié)實(shí)驗(yàn)的心得體會(huì),并提出實(shí)驗(yàn)的改進(jìn)意見(jiàn))經(jīng)過(guò)幾天的努力實(shí)驗(yàn)終于完成,程序能正確運(yùn)行。對(duì)線程的同步與互斥技術(shù)有了比較深刻的了解,生產(chǎn)者消費(fèi)者問(wèn)題是研究多線程程序時(shí)繞不開(kāi)的問(wèn)題,它的描述是有一塊生產(chǎn)者和消費(fèi)者共享的有界緩沖區(qū),生產(chǎn)者往緩沖區(qū)放入產(chǎn)品,消費(fèi)者從緩沖區(qū)取走產(chǎn)品,這個(gè)過(guò)程可以無(wú)休止的執(zhí)行,不能因緩沖區(qū)滿生產(chǎn)者放不進(jìn)產(chǎn)品而終止

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論