




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1. 生产者-消费者问题是一个经典的进程同步问题,该问题最早由 Dijkstra 提出,用以演示他提出的信号量机制。在同一个进程地址空间内执行的两个线程。生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。消费者线程从缓冲区中获得物品,然后释放缓冲区。当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区。当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来。#include #include const unsigned short SIZE_OF_BUFFER = 10; /缓冲区长度 unsigned short ProductID = 0; /产品号 unsigned short ConsumeID = 0; /将被消耗的产品号 unsigned short in = 0; /产品进缓冲区时的缓冲区下标 unsigned short out = 0; /产品出缓冲区时的缓冲区下标 int g_bufferSIZE_OF_BUFFER; /缓冲区是个循环队列 bool g_continue = true; /控制程序结束 HANDLE g_hMutex; /用于线程间的互斥 HANDLE g_hFullSemaphore; /当缓冲区满时迫使生产者等待 HANDLE g_hEmptySemaphore; /当缓冲区空时迫使消费者等待 DWORD WINAPI Producer(LPVOID); /生产者线程 DWORD WINAPI Consumer(LPVOID); /消费者线程 int main() /创建各个互斥信号 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); /调整下面的数值,可以发现,当生产者个数多于消费者个数时, /生产速度快,生产者经常等待消费者;反之,消费者经常等待 const unsigned short PRODUCERS_COUNT = 3; /生产者的个数 const unsigned short CONSUMERS_COUNT = 1; /消费者的个数 /总的线程数 const unsigned short THREADS_COUNT = PRODUCERS_COUNT+CONSUMERS_COUNT; HANDLE hThreadsPRODUCERS_COUNT; /各线程的 handle DWORD producerIDCONSUMERS_COUNT; /生产者线程的标识符 DWORD consumerIDTHREADS_COUNT; /消费者线程的标识符 /创建生产者线程 for (int i=0;i #include #include #include using namespace std; #define MAX_SIZE 200 char bufferMAX_SIZE; int in=0; int out=0; int counter=0; int inUse=0; DWORD WINAPI Producer(LPVOID); DWORD WINAPI Consumer(LPVOID); int main() HANDLE hTrd; DWORD ThreadId; hTrd=CreateThread(NULL,0,Producer,(LPVOID)(A),0, if(hTrd) cout “thread function “ a “ Lunched“endl; hTrd=CreateThread(NULL,0,Consumer,NULL,0, Sleep(2000); getch(); return 0; DWORD WINAPI Producer(LPVOID m) while(1) if(inUse=0) bufferin+=(char)m; in%=MAX_SIZE; cout “in“ (char)m endl; inUse=1;/(1) /(1) DWORD WINAPI Producer(LPVOID m) char m; w
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国家能源广州市2025秋招面试专业追问及参考财务审计岗位
- 国家能源内江市2025秋招机械工程类面试追问及参考回答
- 中国广电菏泽市2025秋招笔试题库含答案
- 中国移动潜江市2025秋招行业常识50题速记
- 沧州市中石油2025秋招心理测评常考题型与答题技巧
- 四川中考物理试题及答案
- 2025年卫生公共考试试题及答案
- 定西市中石化2025秋招笔试模拟题含答案安全环保与HSE岗
- 江门市中储粮2025秋招安全环保岗高频笔试题库含答案
- 艺术单招江苏试卷及答案
- 济南市章丘区2024-2025七年级第一学期语文期中试题(带答案)
- 2024-2025学年九年级化学上册 第二单元 单元测试卷(人教版)
- 2024版人教版英语初一上单词默写表
- 双下肢乏力护理查房
- 工程结算审核服务方案技术标
- 公司驾驶业务外包管理办法
- 店中店合作协议
- AKAIEWI5000电吹管快速入门(中文说明书)
- 炉外精炼-RH读本
- 部编版语文小学五年级下册第一单元集体备课(教材解读)
- 模具设计与制造授课全张课件
评论
0/150
提交评论