资源预览内容
第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
亲,该文档总共4页全部预览完了,如果喜欢就下载吧!
资源描述
#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); Sleep(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()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 操作,判断缓冲区是否为满 /互斥 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=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);
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号