资源简介
生产者消费者算法模拟
目的:掌握信号的使用方法和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 绕过连接密码
相关资源
- 多线程生产者消费者模式
- labview 生产者消费者
- 操作系统中哲学家就餐问题和生产者
- 操作系统课设 读者写者 生产者消费
- windows API 进程通信-生产者消费者问题
- 进程线程之间的同步生产者消费者信
- 操作系统课程设计生产者消费者
- 并行openmp程序实现生产者消费者
- 利用管程_信号量解决生产者消费者问
- 基于队列的状态机—生产者消费者架
- 华南理工大学操作系统实验:生产者
- 操作系统课设,生产者消费者演示程
- QT窗口界面模拟生产者消费者
- 操作系统 课程设计 实现生产者消费者
- 操作系统实现生产者消费者问题
- 生产者消费者问题实验报告和代码实
- LABVIEW的生产者消费者模板
- 生产者消费者C 代码
- Linux 0.11下信号量的简单实现——用生
- \\操作系统课程设计银行家算法,生产
- Dubbo生产者消费者源代码基于Eclipse的
- 操作系统课设用多进程同步方法演示
- 操作系统实验(生产者消费者问题)
- Qt实现串口通信利用windows API实现串口
评论
共有 条评论