操作系統生產者消費者問題實驗報告_第1頁
操作系統生產者消費者問題實驗報告_第2頁
操作系統生產者消費者問題實驗報告_第3頁
操作系統生產者消費者問題實驗報告_第4頁
操作系統生產者消費者問題實驗報告_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

..實驗報告二實驗名稱:一、生產者-消費者問題的多線程解決方案二、設計一個執行矩陣乘法的多線程程序日期:2015-10-22班級:13級計科學號::實驗目的1.掌握線程的同步與互斥2.掌握生產者消費者的實現問題3.掌握多線程的編程方法4.掌握矩陣乘法的根本計算原理以及實現實驗容1.生產者-消費者問題的多線程解決方案2.設計一個執行矩陣乘法的多線程程序工程要求與分析1.請查閱資料,掌握線程創立的相關知識以及矩陣乘法的相關知識,了解java語言程序編寫的相關知識2.理解線程的實驗步驟在本次試驗中,以"生產者-消費者〞模型為依據,提供了一個多線程的"生產者-消費者〞實例,編寫java代碼調試運行結果,得出相應的結論。理解矩陣乘法的實驗步驟具體實現生產者-消費者實例創立一個緩沖信息發送接收通道接口,并創立盒子類實現,主要代碼如下://通道接口publicinterfaceChannel{publicabstractvoidsend(Objectitem);publicabstractObjectreceive();}//實現接口publicclassMessageQueueimplementsChannel{privateVectorqueue;publicMessageQueue(){queue=newVector();}publicvoidsend(Objectitem){queue.addElement(item);}publicObjectreceive(){if(queue.size()==0)returnnull;elsereturnqueue.remove(0);}}創立一個工廠多線程類〔啟動生產者和消費者〕,并且添加main函數進展測試,主要代碼如下://工廠類與主方法publicclassFactory{publicFactory(){ ChannelmailBox=newMessageQueue(); ThreadproducerThread=newThread(newProducer(mailBox)); ThreadconsumerThread=newThread(newConsumer(mailBox));producerThread.start();consumerThread.start();}publicstaticvoidmain(String[]args) {Factoryserver=newFactory(); }創立一個線程睡眠類,用于測試,主要代碼如下:publicclassSleepUtilities{publicstaticvoidnap() {nap(NAP_TIME); }publicstaticvoidnap(intduration) {intsleeptime=(int)(NAP_TIME*Math.random());try {Thread.sleep(sleeptime*1000);}catch(InterruptedExceptione){} }privatestaticfinalintNAP_TIME=5;創立生產者類實現Runnable,主要代碼如下:publicclassProducerimplementsRunnable{privateChannelmbox;publicProducer(Channelmbox){this.mbox=mbox;}publicvoidrun(){Datemessage;while(true) { SleepUtilities.nap();message=newDate(); System.out.println("Producerproduced"+message);mbox.send(message); }}}創立消費者類實現Runnable,主要代碼如下:publicclassConsumerimplementsRunnable{privateChannelmbox;publicConsumer(Channelmbox){this.mbox=mbox;}publicvoidrun(){ Datemessage;while(true) { SleepUtilities.nap();message=(Date)mbox.receive();if(message!=null) System.out.println("Consumerconsumed"+message); }}}調試程序,運行結果:矩陣乘法實例初始化矩陣(便于觀察,這里使用隨機數生成矩陣),主要初始化代碼如下matrix1=newint[m][k];matrix2=newint[k][n];matrix3=newint[m][n];//隨機初始化矩陣a,bfillRandom(matrix1);fillRandom(matrix2);staticvoidfillRandom(int[][]x) {for(inti=0;i<x.length;i++) {for(intj=0;j<x[i].length;j++) {//每個元素設置為0到99的隨機自然數x[i][j]=(int)(Math.random()*100); }}}打印輸出矩陣函數,主要代碼如下:staticvoidprintMatrix(int[][]x){for(inti=0;i<x.length;i++){for(intj=0;j<x[i].length;j++){System.out.print(x[i][j]+"");}System.out.println("");}System.out.println("");}創立多線程類,并實現Runnable接口同步對矩陣進展分行計算,主要代碼如下://創立線程,數量<=4for(inti=0;i<4;i++){if(index<m){Threadt=newThread(newMyThread());t.start();}else{break;}synchronizedstaticintgetTask(){if(index<m){returnindex++;}return-1;}}classMyThreadimplementsRunnable{inttask;//Overridepublicvoidrun(){MultiThreadMatrix.threadCount++;while((task=MultiThreadMatrix.getTask())!=-1){System.out.println("進程:"+Thread.currentThread().getName()+"\t開場計算第"+(task+1)+"行");for(inti=0;i<MultiThreadMatrix.n;i++){for(intj=0;j<MultiThreadMatrix.k;j++){MultiThreadMatrix.matrix3[task][i]+=MultiThreadMatrix.matrix1[task][j]*MultiThreadMatrix.matrix2[j][i];}}}MultiThreadMatrix.threadCount--;}通過不斷改變矩陣大小,線程數目,,調試程序,運行結果:所遇問題與解決方法在生產者-消費者多線程試驗中,剛開場沒有考慮到使用線程睡眠,運行結果速度之快

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論