• 大小: 106KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-29
  • 语言: 其他
  • 标签:

资源简介

生产者消费者算法模拟 目的:掌握信号的使用方法和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

评论

共有 条评论