資源簡介
生產者消費者算法模擬
目的:掌握信號的使用方法和P、V操作的定義,掌握使用P、V操作實現進程之間同步與互斥的方法,加深對進程同步互斥概念的理解。
設計要求:設計一程序,由一個進程創建三個子進程,三個子進程一個是生產者進程,兩個是消費者進程,父子進程都使用父進程創建的共享存儲區進行通信,由生產者進程將一個數組中的十個數值發送到由5個緩沖區組成的共享內存中,兩個消費者進程輪流接收并輸出這十個數值,同時將兩個消費者進程讀出的數值進行累加求各和。

代碼片段和文件信息
#include
#include?
#include?
#include
void?main(){
int??full=0;???????????????????????//用于判斷緩沖池是否為滿
int??emputy=15;????????????????????//用于判斷緩沖池時候為空
char?buffer[15][10];???????????????//用于存放產品
char?ch[10];???????????????????????//用于接收生產的產品和消費的產品??
// int?*p=ch;
int??i=0j=0;
int??num;
int??number;
int??sum=0;
int?k=0;
//int?bl=1;
MAIN:
printf(“----------------------------------產品使用說明-------------------------------\n“);
printf(“?????????????????????????????[1]生產者生產產品\n“);
printf(“?????????????????????????????[2]消費者消費產品\n“);
printf(“-----------------------------------------------------------------------------\n“);
while(true)
{
printf(“請選擇操作:“);
scanf(“%d“&number);
//生產
switch(number){
SIGN1:
case?1:{
printf(“----------------------------------生產使用說明-------------------------------\n“);
printf(“?????????????????????????????[1]生產字母產品\n“);
printf(“?????????????????????????????[2]生產數字產品\n“);
printf(“?????????????????????????????[3]生產符號產品\n“);
printf(“?????????????????????????????[4]返回上一級\n“);
printf(“-----------------------------------------------------------------------------\n“);
//while(bl){
printf(“請選擇生產產品類型:“);
scanf(“%d“&num);
switch(num){
//生產字母產品
CASE1:
case?1:{
if(full==15)
{
printf(“產品已滿!\n“);
}
if(full<15)
{
printf(“請輸入生產的產品:“);
scanf(“?%s“&ch);
for(k=0;ch[k]?!=?‘\0‘;k++){
if(!(ch[k]>=‘a‘?&&?ch[0]<=‘z‘)?&&?!(ch[k]>=‘A‘?&&?ch[0]<=‘Z‘))
{
printf(“您輸入的不是字母產品!請重新輸入。\n“);
goto?CASE1;
//break;
}
}
for(j=0;j {
buffer[i][j]=ch[j];
}
j++;
buffer[i][j]=‘\0‘;
i++;
full++;
emputy--;
printf(“產品生產成功!產品為:%s\n“buffer[i-1]);
}
}
// bl=1;
goto?SIGN1;
//break;
//
//生產數字產品
CASE2:
case?2:{
if(full==15)
{
printf(“產品已滿!\n“);
}
if(full<15)
{
printf(“請輸入生產的產品:“);
scanf(“?%s“&ch);
for(k=0;ch[k]?!=?‘\0‘;k++){
if(!(ch[k]>=‘0‘?&&?ch[0]<=‘9‘)){
printf(“您輸入的不是數字產品!請重新輸入。\n“);
goto?CASE2;
//break;
}
}
while?(ch[k]?!=?‘\0‘)
k++;
//if(ch[0]>=0?&&?ch[0]<1000){
for(j=0;j {
buffer[i][j]=ch[j];
//sum=sum+(ch[j]-48)*(int)pow(10?(k-j-1));
}
//j++;
buffer[i][j]=‘\0‘;
i++;
full++;
emputy--;
printf(“產品生產成功!產品為:%s\n“buffer[i-1]);
}
else
printf(“您輸入的不是數字產品!請重新輸入。\n“);
//}
}
// bl=1;
goto?SIGN1;
//break;
//生產符號產品
CASE3:
case?3:{
if(full==15)
{
printf(“產品已滿!\n“);
}
if(full<15)
{
printf(“請輸入生產的產品:“);
scanf(“?%s“&ch);
for(k=0;ch[k]?!=?‘\0‘;k++){
if((ch[k]>=‘a‘?&&?ch[0]<=‘z‘)?||?(ch[k]>=‘A‘?&&?ch[0]<=‘Z‘)?||?(ch[k]>=‘0
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????7141??2012-12-30?00:16??Myproduce.cpp
?????文件?????1663488??2012-12-30?00:38??操作系統課程設計.doc
- 上一篇:美國naca翼型數據庫
- 下一篇:LGplc 繞過連接密碼
評論
共有 條評論