资源简介
生产者消费者算法模拟
目的:掌握信号的使用方法和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 绕过连接密码
评论
共有 条评论