生产者和消费者问题.doc

生产者和消费者问题.doc

ID:53327392

大小:30.50 KB

页数:6页

时间:2020-04-03

生产者和消费者问题.doc_第1页
生产者和消费者问题.doc_第2页
生产者和消费者问题.doc_第3页
生产者和消费者问题.doc_第4页
生产者和消费者问题.doc_第5页
资源描述:

《生产者和消费者问题.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、班级姓名:学号:成绩:实验名称:生产者和消费者问题1.实验目的:“生产者消费者”问题是一个著名的同时性编程问题的集合。通过编写经典的“生产者消费者”问题的实验,读者可以进一步熟悉Linux中多线程编程,并且掌握用信号量处理线程间的同步互斥问题。2.实验内容:“生产者消费者”问题描述如下。有一个有限缓冲区和两个线程:生产者和消费者。他们分别把产品放入缓冲区和从缓冲区中拿走产品。当一个生产者在缓冲区满时必须等待,当一个消费者在缓冲区空时也必须等待。它们之间的关系如下图所示:这里要求用有名管道来模拟有限缓冲区,用信号量来解决生产者消费者问题中的同步和互斥问题。3.实验方法:(

2、1)使用信号量解决(2)思考使用条件变量解决4.实验过程(1)信号量的考虑这里使用3个信号量,其中两个信号量avail和full分别用于解决生产者和消费者线程之间的同步问题,mutex是用于这两个线程之间的互斥问题。其中avail初始化为N(有界缓冲区的空单元数),mutex初始化为1,full初始化为0。/*product.c*/#include#include#include#include#include#include#include

3、phore.h>#include#defineFIFO"myfifo"#defineN5intlock_var;time_tend_time;charbuf_r[100];sem_tmutex,full,avail;intfd;voidpthread1(void*arg);voidpthread2(void*arg);intmain(intargc,char*argv[]){pthread_tid1,id2;pthread_tmon_th_id;intret;end_time=time(NULL)+30;/*创建有名管道*/if((mkfifo(FIF

4、O,O_CREAT

5、O_EXCL)<0)&&(errno!=EEXIST))printf("cannotcreatefifoserver");printf("Preparingforreadingbytes...");memset(buf_r,0,sizeof(buf_r));/*打开管道*/fd=open(FIFO,O_RDWR

6、O_NONBLOCK,0);if(fd==-1){perror("open");exit(1);}/*初始化互斥信号量为1*/ret=sem_init(&mutex,0,1);/*初始化avail信号量为N*/ret=sem_init

7、(&avail,0,N);/*初始化full信号量为0*/ret=sem_init(&full,0,0);if(ret!=0){perror("sem_init");}/*创建两个线程*/ret=pthread_create(&id1,NULL,(void*)productor,NULL);if(ret!=0)perror("pthreadcread1");ret=pthread_create(&id2,NULL,(void*)consumer,NULL);if(ret!=0)perror("pthreadcread2");pthread_join(id1,NULL);

8、pthread_join(id2,NULL);exit(0);}/*生产者线程*/voidproductor(void*arg){inti,nwrite;while(time(NULL)

9、"writehellototheFIFO");/*V操作信号量full和mutex*/sem_post(&full);sem_post(&mutex);sleep(1);}}/*消费者线程*/voidconsumer(void*arg){intnolock=0;intret,nread;while(time(NULL)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。