生產者消費者同步問題的算法實現(xiàn)_第1頁
生產者消費者同步問題的算法實現(xiàn)_第2頁
生產者消費者同步問題的算法實現(xiàn)_第3頁
生產者消費者同步問題的算法實現(xiàn)_第4頁
生產者消費者同步問題的算法實現(xiàn)_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

一、 實驗目的:全面理解生產者與消費者問題模型,掌握解決該問題的算法思想,正確使用同步機制。二、 實驗內容:問題描述:一組生產者向一組消費者提供消息,它們共享一個有界緩沖池,生產者向其中投放消息,消費者從中取得消息。假定這些生產者和消費者互相等效,只要緩沖池未滿,生產者可將消息送入緩沖池;只要緩沖池未空,消費者可從緩沖池取走一個消息。功能要求:根據(jù)進程同步機制,編寫一個解決上述問題的演示程序,可顯示緩沖池狀態(tài)、放數(shù)據(jù)、取數(shù)據(jù)等過程。放消息取消息n放消息取消息n個緩沖區(qū)(Buffer)三、 編程工具:C、Java、VC或其它可視化語言平臺任選四、 具體設計要求及有關說明1.有3個生產者進程,分別為P1、P2和P3;2.有4個消費者進程,分別是C1、C2、C3和C4;緩沖區(qū)單元個數(shù)N=15;不同的生產進程可生產不同的產品(比如字母、數(shù)字、符號);不同的消費進程可有不同的消費方式(比如“顯示”、“打印”、“拼接成字符串”、“改變大小寫”等)。自己可任意定義。實現(xiàn)代碼:#include<stdio.h>#include<string.h>voidmain(){intfull=0;//用于判斷緩沖池是否為滿intemputy=15;//用于判斷緩沖池時候為空charbuffer[15][10];//用于存放產品charch[10];//用于接收生產的產品和消費的產品inti=0,j=0;intnum;intnumber;intnumb;printf(" 產品使用說明 \n");printf("1生產者生產產品5");printf("2消費者消費產品\n");printf("3生產字母產品\n");printf("4生產數(shù)字產品\n");printf("5生產符號產品\n");printf("6消費方式(顯示)\n");printf("7消費方式(打印)\n");printf("8消費方式(全部變成小寫)\n");printf("9消費方式(全部變成大寫)\n");printf(" ---\n");while(true){printf("請輸入1或者2進行生產或消費:");scanf("%d",&num);if(num==1)〃當num為1的時候,生產者生產產品{printf("請輸入3或者4或者5生產不同的產品:");//當number為3時生產字符,為4時生產數(shù)字,為5時生產字符scanf("%d",&number);//以下生產字符if(number==3){if(full==15)printf("產品已滿!\n");}if(full<15){prinf("請輸入生產的產品:");scanf("%s",&ch);for(j=0;j<sizeof(ch);j++){buffer[i][j]=ch[j];}j++;buffer[i][j]='\0';i++;full++;emputy--;printf("產品生產成功!產品為:%s\n",bufer[i-1]);}}//if(number==3)結束//以下生產數(shù)字if(number==4){if(full==15){printf("產品已滿!\n");}if(full<15){printf("請輸入生產的產品:");scanf("%s",&ch);for(j=0;j<sizeof(ch);j++){buffer[i][j]=ch[j];}j++;buffer[i][j]='\0';i++;full++;emputy--;printf("產品生產成功!產品為:%s\n",buffer[i-1]);}}//if(number==4)結束//以下生產字符if(number==5)if(full==15)printf("產品已滿!\n");}if(full<15){printf("請輸入生產的產品:");scanf("%s",&ch);for(j=0;j<sizeof(ch);j++){buffer[i][j]=ch[j];}j++;buffer[i][j]='\0';i++;full++;emputy--;printf("產品生產成功!產品為:%s\n",buffer[i-1]);}}//if(number==5)結束}〃if(num==1)結束if(num==2)〃當num為2時,消費者消費產品prinf("請輸入6或者7或者8或者9選擇不同消費方式:");〃當numb為6時顯示,為7時打印,為8時轉換成小寫,為9時轉換成大寫scanf("%d",&numb);//以下為顯示消費模式if(numb==6){if(emputy<15){i--;emputy++;full--;printf("消費成功!顯示:%s\n",buffer[i]);}else{printf("產品為空!\n");}}//if(numb==6)結束//以下為打印消費模式if(numb==7){if(emputy<15){emputy++;full--;printf("消費成功!打印:%s\n",buffer[i]);}else{printf("產品為空!\n");}}//if(numb==7)結束//以下為轉換成小寫消費模式if(numb==8){if(emputy<15){i--;emputy++;full--;printf("消費成功!轉換成小寫:%s\n",strlwr(buffer[i]));}else{printf("產品為空!\n");}}//if(numb==8)結束//以下為轉換成大寫消費模式if(numb==9){if(emputy<15){i--;emputy++;full--;pri

溫馨提示

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

評論

0/150

提交評論