资源简介
这是一个在linux系统下用多进程同步的方法解决消费者-生产者问题的源代码,是关于操作系统的。
代码片段和文件信息
#include “stdio.h“
#include
#include
#include
#include
#include
#include
/*缓冲区的最大数*/
#define Size 20
//记录生产者的人数
int sh=0;
//记录消费者的人数
int xiao1=0;
/*缓冲区的结构体*/
struct huan{
int isHave; //标记缓冲区是否有内容有内容时消费者才可以使用
//没内容时生产者才 可以往缓冲区内写东西
//0表示没有内容1表示有内容
int jud; //标志缓冲区是否在被使用中0代表未被使用1表示使用中
int context; //缓冲的内容
};
//描述生产者或者是消费者
struct person{
int end; //记录是否完成任务0表示完成,1表示未完成任务
char * name; /*线程名*/
pthread_t thread; /*线程句柄*/
};
/*控制线程*/
//pthread_t thread;
//缓冲区
struct huan * huan[20];
//生产者,最多有10个生产者
struct person * sheng[10];
//消费者,最多有10个消费者
struct person * xiao[10];
//要放进入缓冲的内容的标记
int context=1;
int timesj(int i) //timesj函数,可产生一个随机数返回
{
int xt;
//为伪随机数初始化
xt = rand() %i+1;
return xt;
}
//生产者往缓冲区内放东西
//i是缓冲区的下标值context是要放入缓冲区的内容currentSheng是当前放进去的生产者
void put(int iint context struct person * currentSheng){
huan[i]->jud=1; //标志缓冲区正在使用
printf(“\n生产者%s 往缓冲区%d 中写入%d“¤tSheng->nameicontext);
//输出当前生产者的名字,缓冲区的下标值和对应缓冲区里的内容
huan[i]->context=context; // 往缓冲区中放入内容
huan[i]->isHave=1; //表示有内容
huan[i]->jud=0; //释放空间,缓冲区未被使用
}
//消费者往缓冲区内拿东西
//i是缓冲区的下标值currentXiao是当前拿缓冲区东西的消费者
int take(int istruct person * currentXiao){
huan[i]->jud=1; //标志缓冲区正在使用
printf(“\n消费者%s 往缓冲区%d 中拿出%d“¤tXiao->nameihuan[i]->context);
//输出当前消费者的名字,缓冲区的下标值和对应缓冲区里的内容
huan[i]->isHave=0; //表示没有内容
huan[i]->jud=0; //释放空间,缓冲区未被使用
}
void * shengchan(struct person * currentSheng){
int i=0;
for(i=0;i //如果缓冲区没有内容而且缓冲区未被使用
if(huan[i]->isHave==0&&huan[i]->jud==0){
put(icontext++currentSheng); //当前生产者往里面放内容
sleep(timesj(3)); //挂起一段时间
//线程沉睡若干秒模仿线程因为工作而使用了的时间
}
}
currentSheng->end=1; //当前生产者任务未完成
}
void * xiaofei(struct person * currentXiao){
int i=0;
while(context<20)
for(i=0;i //如果缓冲区有内容而且缓冲区未被使用
if(huan[i]->isHave==1&&huan[i]->jud==0){
take(icurrentXiao); //当前消费者取出缓冲区的内容
sleep(timesj(3)); //挂起一段时间
//线程沉睡若干秒模仿线程因为工作而使用了的时间
}
}
currentXiao->end=1; //当前消费者未完成任务
}
int getNumber(){
int a;
a=-99999;
while(1){
scanf(“%d“&a);
getchar();
if(a<=-99999){
printf(“\n你输入的不是数字,请重新输入:“);
}
else break;
}
return a;
}
int main(){
int i=0j=0;
time_t t;
//为随机函数做准备
srand((unsigned) time(&t)); // 以系统时间做种子,初始
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7468 2008-01-21 00:24 linux下用多进程同步方法解决生产者-消费者问题源代码\src\Main
文件 6938 2008-01-22 09:37 linux下用多进程同步方法解决生产者-消费者问题源代码\src\Main.c
目录 0 2008-01-22 09:38 linux下用多进程同步方法解决生产者-消费者问题源代码\src
目录 0 2008-12-05 22:32 linux下用多进程同步方法解决生产者-消费者问题源代码
----------- --------- ---------- ----- ----
14406 4
- 上一篇:清华通信重要国际学术会议目录
- 下一篇:安卓-妄撮-撕衣服-源代码-无广告
评论
共有 条评论