资源简介
大约200行代码,生产者消费者问题,课程设计作品,短小精悍,代码完成,注释非常详细,可用于参考和交作业。
代码片段和文件信息
/*****************************************************************************
由用户输入生产者,消费者数量,缓冲池大小,总共运行的时间。
在每个单位运行时间,每次由主函数产生一个随机数0或1,当为0的时候,就调用生产者的相
关程序(执行生产或者存放信息);当为1的时候就调用消费者的相关程序(执行消费或者取
得信息)。然后返回,重新生成随机数,决定下一步调用对象,完成一个循环。
调用生产者时,随机选取生产者中的一个,如果这个生产者没有信息(产品),则生产信息
,如果已经有了信息,就将信息放入缓冲区
调用消费者时,随机选取消费者中的一个,如果这个消费者已经存有了一个信息,则消费掉
这个信息,如果没有信息,则到缓冲池中取得一个。
******************************************************************************/
#include
#include
#define NULL 0
/*************************************/
/*缓冲池中元素的结构,缓冲池大小由用户输入,所有的元素首尾相连,组成一个环形链表*/
struct buffer
{
int flag;/*标志位,为1的时候表示这个元素中含有信息,为0的时候表示这个元素中不含有信息*/
struct buffer *next;/*指向下一个元素*/
};
/*人的结构,可定义为生产者或者消费者*/
struct person
{
int sign;/*标识位,编号,每个生产者消费者都有自己的编号作为区分*/
int flag;/*标志位,为1表示本身已经拥有一个信息,为0表示没有信息*/
struct person *next;/*指向下一个元素,所有的生产者组成一个单链表,消费者组成一个单链表*/
};
/*************************************/
/*定义全局变量,使得所有的程序都可以共同调用,维护*/
struct buffer *in*out;/*对缓冲池操作的头尾指针,通过in指针将信息放入,通过out指针将信息取出*/
struct person *prod*cons*lp;/*指向人结构的指针,prod指向生产者单链表的头指针,cons指向消费者单链表的头指针*/
int totaltime;/*总共运行的时间,实际上就是运行多少次每次主程序都会产生随机数*/
int prodnumconsnum;/*生产者和消费者的总数*/
int buffernum;/*缓冲池的大小*/
int totalitem=0;/*元素的个数,用于显示*/
/*************************************/
/**********************************************
函数input
作用:输入变量值,初始化生产者,消费者,缓冲池链表
************************************************/
void input()
{
int i=1;
struct person *p3;
struct buffer *head*p2;
printf(“Please input the number of producers!\n“);
printf(“prodnum= “);
scanf(“%d“&prodnum);
printf(“Please input the number of consumers!\n“);
printf(“consnum= “);
scanf(“%d“&consnum);
printf(“Please input the number of buffers!\n“);
printf(“buffernum= “);
scanf(“%d“&buffernum);
printf(“Please input the totaltime!\n“);
printf(“totaltime=(<180): “);
scanf(“%d“&totaltime);
/*以上都是输入,不用多解释吧*/
randomize(); /*初始化随机数发生器,保证rand函数产生的随机数更加随机,可以不用*/
prod=(struct person *)malloc(sizeof(struct person));
prod->sign=0; /*初始化生产者单链表的头指针,标号为0,设置没有信息(产品)*/
prod->flag=0;
prod->next=NULL;
for(i=1;i { /*依次加入prodnum个生产者到单链表中*/
p3=(struct person *)malloc(sizeof(struct person));
p3->sign=i; /*每个生产者的标号都是不一样的*/
p3->flag=0;
p3->next=prod; /*理解一下,就是串在一起*/
prod=p3;
}
cons=(struct person *)malloc(sizeof(struct person));
cons->sign=0; /*初始化消费者单链表的头指针*/
cons->flag=0;
cons->next=NULL;
for(i=0;i { /*依次加入consnum个消费者到单链表中*/
p3=(struct person *)malloc(sizeof(struct person));
p3->sign=i;
p3->flag=0;
p3->next=cons;
cons=p3;
}
head=(struct buffer *)malloc(sizeof(struct buffer));
head->flag=0; /*初始化缓冲池环形链表的头指针*/
head->next=head; /*将这个头指针的next指向自己,即组成一个环形链表*/
in=head;
相关资源
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- 基于mfc的多线程文件传输
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 利用C++哈希表的方法实现电话号码查
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 移木块游戏,可以自编自玩,vc6.0编写
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- C++纯文字DOS超小RPG游戏
- 个人日常财务管理系统(C语言)
- MFC数字钟(基于VC6.0)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- 安科瑞智能电能表MODBUS通讯程序 VC6
评论
共有 条评论