操作系统生产者消费者问题.doc

操作系统生产者消费者问题.doc

ID:28538566

大小:78.50 KB

页数:6页

时间:2018-12-11

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

《操作系统生产者消费者问题.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、《操作系统概念》第七版实验项目:生产者消费者问题·实验目的:使用C++语言和互斥锁实现生产者消费者问题。本程序中,main()函数需要三个参数:主线程休眠时间;生产者线程数;消费者线程数。各线程的休眠等待时间是随机的。(main函数结束时未使用休眠,切休眠等待时间使用了固定值,便于观察)·编程环境:使用win32互斥锁进行了编程。环境为windows8.1操作系统,IDE为visualstudio2013。·程序设计思想:临界区中实现生产与消费,使用两个缓存数组,一个记录产品号一个记录产品分配的随机数,便于观察。线程函数与信号函数均使用windows.h中的win32函数。借助书上的例

2、子完成设计。·代码实现:/*buffer.h*/typedefintbuffer_item;#defineSIZE_OF_BUFFER10//缓冲区长度intinsert_item();intremove_item();#include#include#include#include#includeunsignedshortProductID=0;//产品号unsignedshortConsumeID=0;//将被消耗的产品号unsignedshortin=0;//产品进缓冲区时的缓冲区下

3、标unsignedshortout=0;//产品出缓冲区时的缓冲区下标intg_buffer[SIZE_OF_BUFFER];//缓冲区是个循环队列buffer_itemrand_buffer[SIZE_OF_BUFFER];//储存随机数boolg_continue=true;//控制程序结束HANDLEg_hMutex;//用于线程间的互斥HANDLEg_hFullSemaphore;//当缓冲区满时迫使生产者等待HANDLEg_hEmptySemaphore;//当缓冲区空时迫使消费者等待DWORDWINAPIProducer(LPVOID);//生产者线程DWORDWINAPI

4、Consumer(LPVOID);//消费者线程intmain(){//创建各个互斥信号g_hMutex=CreateMutex(NULL,FALSE,NULL);g_hFullSemaphore=CreateSemaphore(NULL,SIZE_OF_BUFFER-1,SIZE_OF_BUFFER-1,NULL);g_hEmptySemaphore=CreateSemaphore(NULL,0,SIZE_OF_BUFFER-1,NULL);//调整下面的数值,可以发现,当生产者个数多于消费者个数时,//生产速度快,生产者经常等待消费者;反之,消费者经常等待//接收生产者与消费者数量

5、constunsignedshortPRODUCERS_COUNT=3;//生产者的个数constunsignedshortCONSUMERS_COUNT=1;//消费者的个数//总的线程数constunsignedshortTHREADS_COUNT=PRODUCERS_COUNT+CONSUMERS_COUNT;HANDLEhThreads[PRODUCERS_COUNT];//各线程的handleDWORDproducerID[CONSUMERS_COUNT];//生产者线程的标识符DWORDconsumerID[THREADS_COUNT];//消费者线程的标识符//创建生产者

6、线程for(inti=0;i

7、应用程序while(g_continue){if(getchar()){//按回车后终止程序运行g_continue=false;}}return0;}//生产一个产品。voidProduce(){std::cerr<<"Producing"<<++ProductID<<"...";//生产完成并自己+1std::cerr<<"Succeed"<

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

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

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