生产者消费者问题.doc

生产者消费者问题.doc

ID:58234837

大小:204.50 KB

页数:5页

时间:2020-05-19

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

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

1、实验报告四、实验原理:利用进程间共享的信号量、互斥锁等控制线程的同步。相关函数说明:信号量sem_tsem_init信号量初始化)、sem_wait(信号量值减一)、sem_post(信号量值加一)互斥量(线程)pthread_mutex_tpthread_mutex_init(互斥量初始化)pthread_mutex_lock(互斥量加锁)pthread_mutex_unlock(互斥量解锁)线程和进程pthread_t(线程)pid_t(进程)pthread_create(创建线程)fork(创建进程)pthread_join(等待线程结束)waitpid(停止目前进程的执行,直到有

2、信号来到或子进程结束)五实验内容:1、有一群生产者进程在生产产品,并将这些产品提供给消费者进程去消费。为使生产者进程与消费者进程能并发执行,在两者之间设置了一个具有n个缓冲区的缓冲池:生产者进程从文件中读取一个数据,并将它存放到一个缓冲区中;消费者进程从一个缓冲区中取走数据,并输出此数据。生产者和消费者之间必须保持同步原则:不允许消费者进程到一个空缓冲区去取产品;也不允许生产者进程向一个已装满产品且尚未被取走的缓冲区中投放产品。2、创建3进程(或者线程)作为生产者,4个进程(或者线程)作为消费者。创建一个文件作为数据源,文件中事先写入一些内容作为数据。3、生产者和消费者进程(或者线程)都

3、具有相同的优先级。六实验器材(设备、元器件)(1)学生每人一台PC,安装WindowsXP/2000操作系统。(1)局域网络环境。(2)个人PC安装VMware虚拟机和Ubuntu系统。七实验步骤(1)实现哲学家就餐问题(2)算法思想在同一个进程地址空间内执行的两个线程生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。消费者线程从缓冲区中获得物品,然后释放缓冲区。当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区。当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来。(3)程序代码(重要

4、代码请注释)#include#include#include#include#include/*****************************/#definePN2//生产者数#defineCN3//消费者数#defineM10//缓冲区数目intin;//生产者指针intout;//消费者指针intbuff[M]={0};intproductID=0,prochaseID=0;//生产者消费者idsem_tisFull;//信号量sem_tisEmpty;pthread_

5、mutex_tmutex;//互斥信号量void*product();void*prochase();voidprint();intmain(){pthread_tprodID[PN];pthread_tprocID[CN];inti=0,j=0;intpthreadState;intstate1=sem_init(&isEmpty,0,M);intstate2=sem_init(&isFull,0,0);if(state1!=0

6、

7、state2!=0){printf("createsemiserror");exit(1);}for(i=0;i

8、pthread_create(&prodID[i],NULL,product,(void*)(&i));if(pthreadState!=0){printf("product%dcreationfailed",i);exit(1);}}for(j=0;j

9、rodID[i],NULL);}for(j=0;j

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

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

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