C语言实现多个生产者和消费者

上传人:公**** 文档编号:564843288 上传时间:2022-12-13 格式:DOCX 页数:4 大小:9.14KB
返回 下载 相关 举报
C语言实现多个生产者和消费者_第1页
第1页 / 共4页
C语言实现多个生产者和消费者_第2页
第2页 / 共4页
C语言实现多个生产者和消费者_第3页
第3页 / 共4页
C语言实现多个生产者和消费者_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《C语言实现多个生产者和消费者》由会员分享,可在线阅读,更多相关《C语言实现多个生产者和消费者(4页珍藏版)》请在金锄头文库上搜索。

1、#include windows.h#include conio.h#include stdio.h#defineNUM 10/缓冲区的数量#definePRO 5/生产者的数量#defineCON 3/消费者的数量intaNUM;/循环缓冲区intcount=1;/计数值初始化static HANDLE full;/全局满缓冲区信号量的声明static HANDLE empty;/全局空缓冲区信号量的声明HANDLE mutex; /全局互斥信号量的声明void Proclucer() while(1) if(count=NUM) printf( 缓冲区已满,请等待 3 秒! n); Sle

2、ep(3000);else/初始化产品/p 操作,判断缓冲区是否为满/互斥 p 操作int product=4;WaitForSingleObject(empty,INFINITE);WaitForSingleObject(mutex,INFINITE);count=count%NUM;acount=product;count+;printf( 生产者生产产品总数为: %dn,count); /向缓冲区放入产品/释放互斥信号量/释放自然信号量Sleep(3000);ReleaseMutex(mutex);ReleaseSemaphore(empty,1,NULL);void Consumer(

3、)while(1)if(count=0)printf( 缓冲区已空,请等待 3 秒! n);Sleep(3000);elseint consumer=0;WaitForSingleObject(empty,INFINITE);WaitForSingleObject(mutex,INFINITE);count=count%NUM;consumer=acount;count-;printf( 消费者消费产品总数为: %dn,count);Sleep(3000);ReleaseMutex(mutex);ReleaseSemaphore(empty,1,NULL);/初始化消费变量/pc 操作,判断缓

4、冲区是否为满 /互斥 p 操作/向缓冲区取出产品/释放互斥信号量/释放自然信号量HANDLE pThreadPRO;HANDLE cThreadCON;HANDLE oThread;int opration()int a=getchar(); return a;/生产者进程句柄/消费者进程句柄 /生产者进程句柄void Start()int i;for(i=0;iPRO;i+)pThreadi=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Proclucer,NULL,0,NULL); /创建生产者线程for(i=0;iCON;i+)cThreadi=

5、CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Consumer,NULL,0,NULL); /创建消费者线程oThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)opration,NULL,0,NULL);int isopration=opration();if(isopration=0)for(i=0;iPRO;i+)CloseHandle(pThreadi);for(i=0;iPRO;i+)CloseHandle(cThreadi);CloseHandle(oThread); oThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)opration,NULL,0,NULL); /结束操作线程mutex=CreateMutex(NULL,FALSE,mutex1);/ 创建互斥信号量full=CreateSemaphore(NULL,0,NUM,emptyHandle);/创建满缓冲区信 号量 ,初始化为 0;empty=CreateSemaphore(NULL,NUM,NUM,emptyHandle);/创建空缓冲区信号量, 初始化为 10;void main()Start();printf(/n);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号