您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > 操作系统生产者消费者问题代码
#includewindows.h#includefstream.h#includeiostream.h#includestring#includeconio.h//声明所需变量intin=0;intout=0;HANDLEh_Thread[20];//线程数组HANDLEempty_Semaphore;//表示空缓冲区的信号量HANDLEfull_Semaphore;//表示空缓冲区的信号量HANDLEmutex;structdata{intID;//序号chartype;//类型,是生产者还是消费者,porcdoubledelay;//线程延迟的时间,对应生产者生产产品的时间或消费者消费产品的时间};dataThreadInfo[20];//线程信息数组intlength;//线程信息数组中实际的线程个数voidProduce(void*p);//生产者进程voidConsume(void*p);//消费者进程voidinput(void);intmain(void){input();//初始化临界区对象//InitializeCriticalSection(&PC_Critical);empty_Semaphore=CreateSemaphore(NULL,10,10,NULL);full_Semaphore=CreateSemaphore(NULL,0,10,NULL);mutex=::CreateMutex(NULL,FALSE,NULL);cout下面生产者和消费者开始工作!!endl;coutendl;//创建生产者和消费者线程for(inti=0;ilength;i++){if(ThreadInfo[i].type=='p')h_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Produce),&(ThreadInfo[i]),0,NULL);elseh_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Consume),&(ThreadInfo[i]),0,NULL);}//主程序等待各个线程的动作结束WaitForMultipleObjects(length,h_Thread,TRUE,-1);coutendl;::Sleep(1000000);cout所有的生产者和消费者都完成了它们的工作!!endlendl;return0;}//*****************************************************************************************//生产者进程//******************************************************************************************voidProduce(void*p){}//*****************************************************************************************//消费者进程//******************************************************************************************voidConsume(void*p){//局部变量声明intmy_id;doublemy_delay;//从线程信息数组中获得信息my_id=((data*)(p))-ID;my_delay=((data*)(p))-delay;//开始请求xiaofeicout消费者my_id发出消费请求。endl;coutendl;WaitForSingleObject(full_Semaphore,-1);::WaitForSingleObject(mutex,-1);//EnterCriticalSection(&PC_Critical);cout消费者my_id消费......endl;out=(out+1)%10;Sleep(my_delay*1000);cout消费者my_id完成了消费。endlendl;//LeaveCriticalSection(&PC_Critical);ReleaseSemaphore(empty_Semaphore,1,NULL);::ReleaseMutex(mutex);}//*****************************************************************************************//输入进程信息的函数//******************************************************************************************voidinput(void){//定义局部变量intid;charch;doubletime;intk=0;cout********请输入线程信息:endl;cout********线程ID;endl;cout********线程的类型(生产者线程,还是消费者线程,p代表生产者,c代表消费者);endl;cout********线程延迟时间。endl;cout********线程ID为0时结束线程信息的输入!!endlendl;while(id!=0){coutpleaseinputathreadID.endl;cinid;ThreadInfo[k].ID=id;if(id==0)break;coutpleaseinputathreadtype.endl;cinch;ThreadInfo[k].type=ch;coutpleaseinputathreaddelaytime:endl;cintime;ThreadInfo[k].delay=time;k++;}length=k;coutendl您输入的线程信息为:endl;for(intj=0;jlength;j++){coutthreadThreadInfo[j].IDThreadInfo[j].typeThreadInfo[j].delayendl;}}
本文标题:操作系统生产者消费者问题代码
链接地址:https://www.777doc.com/doc-5832580 .html