




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)報(bào)告題 目 三大經(jīng)典問(wèn)題之生產(chǎn)者與消費(fèi)者問(wèn)題一、課程設(shè)計(jì)的性質(zhì)與任務(wù)1、加深對(duì)并發(fā)協(xié)作進(jìn)程同步與互斥概念的理解。 通過(guò)編寫(xiě)程序?qū)?現(xiàn)進(jìn)程同步和互斥,使學(xué)生掌握有關(guān)進(jìn)程(線程)同步與互 斥的原理,以及解決進(jìn)程(線程)同步和互斥的算法,從而 進(jìn)一步鞏固進(jìn)程(線程)同步和互斥等有關(guān)的內(nèi)容。2、掌握進(jìn)程和線程 的概念,進(jìn) 程(線程)的控制原語(yǔ)或系統(tǒng) 調(diào)用的使用。3、了解 Windows2000/XP中多 線程的 并發(fā)執(zhí)行 機(jī)制,線程間 的同步和互 斥。學(xué)習(xí) 使用Windows2000/XP中基 本的同步 對(duì)象, 掌握相應(yīng)的API函數(shù)。4、培養(yǎng)學(xué)生能夠獨(dú)立進(jìn)行知識(shí)綜合,獨(dú)立開(kāi)發(fā)較大程序
2、的能力。5、培養(yǎng)提高學(xué)生軟件開(kāi)發(fā)能力和軟件的調(diào)試技術(shù)。6、培養(yǎng)學(xué)生開(kāi)發(fā)大型程序的方法和相互合作的精神。7、培養(yǎng)學(xué)生的創(chuàng)新意識(shí)。8、培養(yǎng)學(xué)生的算法設(shè)計(jì)和算法分析能力。9、培養(yǎng)學(xué)生對(duì)問(wèn)題進(jìn)行文字論述和文字表達(dá)的能力。二、課程設(shè)計(jì)的內(nèi)容及其要求在 Windows XP、Windows 2000等操作系統(tǒng)下,使用的 VC VB、Java或C等編程語(yǔ)言,采用 進(jìn)程(線程)同步和互 斥的技術(shù)編寫(xiě)程序?qū)崿F(xiàn)生產(chǎn)者消費(fèi)者問(wèn)題或哲學(xué)家進(jìn)餐問(wèn)題 或讀者-寫(xiě)者問(wèn)題或自己設(shè)計(jì)一個(gè)簡(jiǎn)單進(jìn)程(線程)同步和互 斥的實(shí)際問(wèn)題。要求:(1)經(jīng)調(diào)試后程序能夠正常運(yùn)行。(2)采用多進(jìn)程或多線程方式運(yùn)行,體現(xiàn)了進(jìn)程(線 程)同步互斥的
3、關(guān)系。(3)程序界面美觀。三、實(shí)驗(yàn)原理本實(shí)驗(yàn)要求利用PV操作實(shí)現(xiàn)解決生產(chǎn) 者一一消費(fèi)者問(wèn)題 中的同步問(wèn)題。此問(wèn)題描述的是一群生產(chǎn)者進(jìn)程在生產(chǎn)產(chǎn)品 并將這些產(chǎn)品提供給消費(fèi)者進(jìn)程去消費(fèi),在兩者之間設(shè)置了 一個(gè)具有n個(gè)緩沖區(qū)的緩沖池,生產(chǎn)者進(jìn)程將它所生產(chǎn)的產(chǎn) 品放入一個(gè)緩沖區(qū),消費(fèi)者進(jìn)程可從緩沖區(qū)中取走產(chǎn)品去消 費(fèi),但它們之間必須保持同步,即不允許消費(fèi)者進(jìn)程到一個(gè) 空緩沖區(qū)去取產(chǎn)品,也不允許生產(chǎn)者進(jìn)程向一個(gè)已裝滿(mǎn)且尚 未取出的緩沖區(qū)中投放產(chǎn)品,并且生產(chǎn)者消費(fèi)者互斥使用緩 沖區(qū)。四、實(shí)驗(yàn)原理圖五、算法實(shí)現(xiàn)(1)有一個(gè)生產(chǎn)者線程 ProduceThread ,有1個(gè)消費(fèi)者進(jìn)程 CustomerThrea
4、d;緩沖區(qū)為 shareList。(2)使用線程同步:用synchonized關(guān)鍵字(加鎖)使得一個(gè)時(shí)間 內(nèi)只能有一個(gè)線程得到執(zhí)行,另一個(gè)線程必須等待當(dāng)前線程執(zhí)行完這 個(gè)代碼塊以后才能執(zhí)行該代碼塊;wait()讓線程進(jìn)入等待狀態(tài);notify ()函數(shù)喚醒一個(gè)處于等待狀態(tài)的線程。(3)程序運(yùn)行流程圖如下: (如不在外相中斷,程序?qū)⒁恢毖h(huán)運(yùn)行)開(kāi)始生產(chǎn)者消費(fèi)者消費(fèi)者消費(fèi)喚醒生產(chǎn)者生產(chǎn)者生產(chǎn) /消費(fèi)者等待喚醒消費(fèi)者六、源代碼package操作系統(tǒng);/* 產(chǎn)品類(lèi)* /publicclass Goods int id;String name;public String toString() retu
5、rn id+" "+name; package操作系統(tǒng);import java.util.List;/* 消費(fèi)者線程:有產(chǎn)品時(shí)可以取出,無(wú)產(chǎn)品時(shí)等待* /publicclass CustomerThreadextends Threadprivate ListshareList;CustomerThread(LjstshareList)this .shareList=shareList;publicvoid run()System.out .println("消費(fèi)線程已啟 動(dòng).”+shareList.size();while (true )try synchroni
6、zed (shareList)while (shareList.size()=0)如果沒(méi)有產(chǎn)品,消費(fèi)線程則等待shareList.wait();while (shareList.size()>0)System. out .println("<-消費(fèi)線程取出產(chǎn)品:"+shareList.remove(0).toString();shareList.notify(); catch (Exception ef)ef.printStackTrace();package 操作系統(tǒng);import java.util.List;/*生產(chǎn)者線程:無(wú)數(shù)據(jù)時(shí)再存,存入一個(gè)要發(fā)通知*
7、/publicclass ProduceThreadextends Thread /構(gòu)造器參數(shù)是生產(chǎn)線程要放入的隊(duì)列 public ProduceThread(ListshareList)this .shareList=shareList;publicvoid run()System.out .println("生產(chǎn)線程已啟動(dòng).”+shareList.size();while (true )try Thread. sleep (2000);synchronized (shareList)while (shareList.size()>0)shareList.wait();whi
8、le (shareList.size()=0)Goods gs = neWGoods();count+;gs.id= count;="產(chǎn)品"+ count;System.out .println("->生產(chǎn)線程放入對(duì)象:"+gs.toString();shareList.add(gs);/通知消費(fèi)線程,隊(duì)列中有對(duì)象了shareList.notify(); catch (Exception ef)ef.printStackTrace();/用來(lái)標(biāo)記放入對(duì)象的每一個(gè)獨(dú)立ID號(hào)privatestaticint count=0;/與消費(fèi)者線程
9、或以共同存取的對(duì)象列表private ListshareList;package操作系統(tǒng);importjava.util.LinkedList;importjava.util.List;public class Manage /主函數(shù)public static void main(String口 args)/生產(chǎn) 消費(fèi)線程交換對(duì)象的隊(duì)列List shareList = new java.util.LinkedList();/啟動(dòng)生產(chǎn)線程 newProduceThread(shareList).start();/啟動(dòng)消費(fèi)線程 newCustomerThread(shareList).start();七、運(yùn)行結(jié)果八、實(shí)驗(yàn)心得在此次實(shí)驗(yàn)中我們模擬PV 操作同步機(jī)構(gòu),來(lái)解決消費(fèi)者與生產(chǎn)者這兩個(gè)進(jìn)程之間的同步協(xié)調(diào)問(wèn)題。 實(shí)驗(yàn)中值得注意的是解決進(jìn)程同步需要做哪些工作,如何利用信號(hào)量機(jī)制來(lái)解決進(jìn)程同步問(wèn)題等等。通過(guò)本次實(shí)驗(yàn),我對(duì)操作系統(tǒng)的p、 v 有了進(jìn)一步認(rèn)識(shí),深入了解了p、 v 操作的實(shí)質(zhì)和其重要性,加深了我對(duì)操作系統(tǒng)中多線程機(jī)制的理解和認(rèn)識(shí),更讓我認(rèn)識(shí)到知識(shí)的掌握,僅靠學(xué)習(xí)理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,要與實(shí)際動(dòng)手操作相結(jié)合才能更好地理解和分析問(wèn)題。此外,我也發(fā)現(xiàn)自己在編程上仍存在較大的問(wèn)題,本次實(shí)驗(yàn)讓我
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小區(qū)垃圾安全管理制度
- 公司車(chē)間保密管理制度
- 培訓(xùn)機(jī)構(gòu)考務(wù)管理制度
- 公司郵箱微信管理制度
- 制定企業(yè)合同管理制度
- 宿舍留宿人員管理制度
- 華為內(nèi)部輪崗管理制度
- 廚房能源合同管理制度
- 公司房屋住宿管理制度
- 初中循環(huán)用書(shū)管理制度
- 田畝轉(zhuǎn)戶(hù)協(xié)議書(shū)
- 2025年商業(yè)倫理與社會(huì)責(zé)任認(rèn)識(shí)考試試卷及答案
- 資產(chǎn)委托購(gòu)買(mǎi)協(xié)議書(shū)
- 病例康復(fù)治療匯報(bào)
- 2025-2030中國(guó)半導(dǎo)體行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 庭院綠化養(yǎng)護(hù)合同協(xié)議書(shū)
- 退休返聘合同和協(xié)議書(shū)
- 2025年MySQL開(kāi)發(fā)趨勢(shì)試題及答案研究
- 山東省濟(jì)寧市2025年高考模擬考試化學(xué)試題及答案(濟(jì)寧三模)
- 胃癌護(hù)理個(gè)案護(hù)理
- 2025年汽車(chē)經(jīng)銷(xiāo)行業(yè)深度研究報(bào)告
評(píng)論
0/150
提交評(píng)論