1 / 11
文档名称:

操作系统生产者与消费者源代码.doc

格式:doc   大小:25KB   页数:11页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

操作系统生产者与消费者源代码.doc

上传人:sanshenglu2 2020/6/22 文件大小:25 KB

下载得到文件列表

操作系统生产者与消费者源代码.doc

文档介绍

文档介绍:/*生产者/消费者*/#include<>#include<>#include<>structPCB{ intflag; //1为生产者,2为消费者 intnumLabel;};typedefstructQNode{ PCBdata;//数据域 structQNode*next;//指针域}QNode,*QueuePtr;typedefstruct{ QueuePtrfront;//队头指针 QueuePtrrear;//队尾指针}LinkQueue;typedefstructLNode{ QueuePtrdata; structLNode*next;}LNode,*LinkList;voidQueueInit(LinkQueue&Q)//初始化队列{ ==(QueuePtr)malloc(sizeof(QNode)); ->next=NULL;}voidLinkListInit(LinkList&L)//初始化链表{ L=(LinkList)malloc(sizeof(LNode));}voidEnQueue(LinkQueue&Q,QueuePtrp)//入队{ p->next=NULL; ->next=p; =p;}QueuePtrDeQueue(LinkQueue&Q)//出队{ QueuePtrp=->next; ->next=p->next; if(==p)=; returnp;}voidoutqueue(LinkQueue&Q){QueuePtrp=->next; ->next=p->next; if(==p)=;}voidLinkListInsert(LinkList&L,QueuePtre)//进入链表{ LinkListp=L; LinkListq=(LinkList)malloc(sizeof(LNode)); while(p->next)p++; q->data=e; q->next=NULL; p->next=q;}voidprocessproc(LinkQueue&Q)//创建进程进入初始队列{ intprocessNum=0; cout<<"请输入进程的个数:";//确定进程个数,默认为0 cin>>processNum; for(inti=0;i<processNum;i++) { cout<<"输入第"<<i+1<<"个进程的种类,如果是生产者请输入(1)/如果是消费者请输入(2)"; structPCBpcb; cin>>;//输入进程的种类 =i+1;//进程序号赋值 QueuePtrp=(QueuePtr)malloc(sizeof(QNode)); p->data=pcb; EnQueue(Q,p); }}boolHasElement(LinkQueueQ)//判断队列是否为空{ if(==) return0; else return1;}intProduceRun(int&full,intBufferSize)//运行生产者进程{ if(full<BufferSize) { full++; return1; } return0;}intConsumeRun(int&full,intBufferSize)//运行消费者进程{ if(full>0) { full--; return1; } return0;}voidDisPlay(LinkQueueQ)//打印队列{ QueuePtrp=; while(p->next) { cout<<"进程"<<p->next-><<endl; p=p->next; }}voidmain(){ intBufferSize;//设置缓冲区大小 cout<<"请设置缓冲区的大小:"; cin>>BufferSize;intfull=0;//当前缓冲区中的进程数目 inttemp=1; LinkListover;//用于收集已经运行结束的进程 LinkListInit(over); LinkQueueReadyQueue;//就绪队列 LinkQueueProducerWaitQueue;//生产者等待队列 LinkQueueConsumerWaitQueue;//消费者等待队列 //初始化 QueueInit(ReadyQueue); QueueInit(ProducerWaitQueue); QueueIn