下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、湖南農(nóng)業(yè)大學(xué)信息科學(xué)技術(shù)學(xué)院學(xué) 生 實(shí) 驗(yàn) 報(bào) 告姓名: 年級專業(yè)班級 日期 2008 年 11 月 25日 成績 課程名稱操作系統(tǒng)實(shí)驗(yàn)名稱進(jìn)程同步和互斥 實(shí)驗(yàn)類型驗(yàn)證 設(shè)計(jì)綜合 創(chuàng)新【實(shí)驗(yàn)?zāi)康?、要求】?)通過編寫程序?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中基本的同步對象,掌握相應(yīng)的API函數(shù)。(4)掌握進(jìn)程和線程的概念,進(jìn)程(線程)的控制原語或系統(tǒng)調(diào)用的使用。【
2、實(shí)驗(yàn)內(nèi)容】在Windows XP操作系統(tǒng)下,使用java等編程語言,采用進(jìn)程(線程)同步和互斥的技術(shù)編寫程序?qū)崿F(xiàn)生產(chǎn)者-消費(fèi)者問題?!緦?shí)驗(yàn)環(huán)境】(含主要設(shè)計(jì)設(shè)備、器材、軟件等)裝有JDK1.6 的PC電腦一臺(tái)【實(shí)驗(yàn)步驟、過程】(含原理圖、流程圖、關(guān)鍵代碼,或?qū)嶒?yàn)過程中的記錄、數(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)者卻沒有來得及接受信息這種情況。為此,需要引入由一個(gè)或者若干個(gè)存儲(chǔ)單元組成的臨時(shí)存儲(chǔ)區(qū),以便存放生產(chǎn)者所產(chǎn)生的信息,平滑進(jìn)程間
3、由于速度不確定所帶來的問題。這個(gè)臨時(shí)存儲(chǔ)區(qū)叫做緩沖區(qū),通常用一維數(shù)組來表示。由一個(gè)或若干個(gè)存儲(chǔ)單元組成的緩沖區(qū)叫作“有窮緩沖區(qū)”。下面我們來分 析一下有窮緩沖的生產(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)程則總是從 Buffer Rear中取
4、出信息。如果想使生產(chǎn)者進(jìn)程和消費(fèi)者進(jìn)程協(xié)調(diào)合作,則必須使它們 遵循如下規(guī)則: 1) 只要緩沖區(qū)有存儲(chǔ)單元,生產(chǎn)者都可往其中存放信息;當(dāng)緩沖區(qū)已滿時(shí),若任意生產(chǎn)者提出寫要求,則都必須等待; 2) 只要緩沖區(qū)中有消息可取,消費(fèi)者都可從緩沖區(qū)中取出消息;當(dāng)緩沖區(qū)為空時(shí),若任意消費(fèi)者想取出信息,則必須等待; 3) 生產(chǎn)者們和消費(fèi)者們不能同時(shí)讀、寫緩沖區(qū)。開始生產(chǎn)者線程開始消費(fèi)者線程開始是放入產(chǎn)品到緩沖池判斷緩沖池是否滿了判斷緩沖池能否放下新產(chǎn)品否是否是從緩沖池中取出產(chǎn)品判斷緩沖池是否空判斷緩沖池中產(chǎn)品夠不夠取否是否通過notify()喚醒消費(fèi)者線程,而生產(chǎn)者線程阻塞通過notify()喚醒生產(chǎn)者線程,
5、而消費(fèi)者線程阻塞在實(shí)際運(yùn)行中,生產(chǎn)者和消費(fèi)者兩個(gè)線程的最開始的運(yùn)行是沒有先后之分的,兩個(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).start(); new Thr
6、ead(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 (InterruptedException e) e.printStackTrace
7、(); 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; Producer(SyncStack ss) this.ss =
8、ss; public void run() for(int i=0; i20; 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 = null; Consumer(SyncStack ss) this.ss = ss;
9、 public void run() for(int i=0; i20; 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)了:WoTou : 1生產(chǎn)了:WoTou : 1生產(chǎn)了:WoTou : 1生產(chǎn)了:WoTou : 2生產(chǎn)了:WoTou :
10、 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é)】(對實(shí)驗(yàn)結(jié)果進(jìn)行相應(yīng)分析,或總結(jié)實(shí)驗(yàn)的心得體會(huì),并提出實(shí)驗(yàn)的改進(jìn)意見)經(jīng)過幾天的努力實(shí)驗(yàn)終于完成,程序能正確運(yùn)行。對線程的同步與互斥技術(shù)有了比較深刻的了解,生產(chǎn)者消費(fèi)者問題是研究多線程程序時(shí)繞不開的問題,它的描述是有一塊生產(chǎn)者和消費(fèi)者共享的有界緩沖區(qū),生產(chǎn)者往緩沖區(qū)放入產(chǎn)品,消費(fèi)者從緩沖區(qū)取走產(chǎn)品,這個(gè)過程可以無休止的執(zhí)行,不能因緩沖區(qū)滿生產(chǎn)者放不進(jìn)產(chǎn)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024離婚協(xié)議要點(diǎn)及范本
- 2024石材礦山荒料資源整合與開發(fā)合同3篇
- 2025年度鴨苗繁育基地建設(shè)與運(yùn)營管理合同3篇
- 2025年度船舶船員體檢與健康保險(xiǎn)合同3篇
- 二零二五年搬家物流運(yùn)輸合同樣本6篇
- 2024版建設(shè)工程施工合同ef0203
- 二零二五年度房地產(chǎn)項(xiàng)目土地置換合同3篇
- 2025年草原生態(tài)保護(hù)與草原旅游開發(fā)一體化合同3篇
- 2024版深圳股權(quán)轉(zhuǎn)讓合同協(xié)議書范本
- 2025年度高空樓頂廣告設(shè)計(jì)與施工一體化服務(wù)合同4篇
- 深圳2024-2025學(xué)年度四年級第一學(xué)期期末數(shù)學(xué)試題
- 中考語文復(fù)習(xí)說話要得體
- 《工商業(yè)儲(chǔ)能柜技術(shù)規(guī)范》
- 華中師范大學(xué)教育技術(shù)學(xué)碩士研究生培養(yǎng)方案
- 醫(yī)院醫(yī)學(xué)倫理委員會(huì)章程
- xx單位政務(wù)云商用密碼應(yīng)用方案V2.0
- 風(fēng)浪流耦合作用下錨泊式海上試驗(yàn)平臺(tái)的水動(dòng)力特性試驗(yàn)
- 高考英語語法專練定語從句含答案
- 有機(jī)農(nóng)業(yè)種植技術(shù)操作手冊
- 【教案】Unit+5+Fun+Clubs+大單元整體教學(xué)設(shè)計(jì)人教版(2024)七年級英語上冊
- 2020年的中國海外工程示范營地申報(bào)材料及評分標(biāo)準(zhǔn)
評論
0/150
提交評論