实验1进程同步(注释)

实验1进程同步(注释)

ID:41656970

大小:63.49 KB

页数:13页

时间:2019-08-29

实验1进程同步(注释)_第1页
实验1进程同步(注释)_第2页
实验1进程同步(注释)_第3页
实验1进程同步(注释)_第4页
实验1进程同步(注释)_第5页
资源描述:

《实验1进程同步(注释)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、include实验1进程同步一、实验要求•模拟生产者与消费者问题•分析代码,给出注释•给岀实验结果二、实验内容数据结构:每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程类型标号、进程系统号、进程状态(本程序未用)、进程产品(字符)、进程链指针等等。系统开辟了一个缓冲区,大小曲buffersize指定。程序中冇三个链队列,一个链表。一•个就绪队列(ready),两个等待队列:生产者等待队列(producer);消费者队歹

2、J(consumer)o—个链表(over).用于收集已经运行结束的进程本程序通过函数模拟信号量的原于操作

3、。算法的文字描述:①由用户指定要产生的进程及其类别,存入进入就绪队列。②调度程序从就绪队列屮提取-•个就绪进程运行。如果屮请的资源不存在则进入响应的等待队列,调度程序调度就绪队列中的下一个进程。进程运行结束时,会检杳对应的等待队列,激活队列中的进程进入就绪队列。运行结束的进程进入over链农。重复这一过程直至就绪队列为空。③程序询问是否要继续?如果要转鬥①开始执行,否则退出程序。源程序代码部分:#include〃定义//Canonlybeusedinindependentsituation;//#definegetmem(type)(type*)

4、malloc(sizeof(type))#definebuffersize5〃缓冲区为5intprocessnum=0;//thenumofprocesses〃赋初值为0structpeb{r定义进程控制块PCB7intflag;//flag=1denoteproducer;flag=2denoteconsumer;〃定义进程1为生产者进程,进程2为消费者进程intnumlabel;charproduct;//生产者charstate;〃状态structpeb*processlink;〃定义进程栏}*exe=NULL,*over=NULL;typedefstruct

5、pebPCB;〃定义进程控制块PCB*readyhead=NULL,*readytail=NULL;PCB*consumerhead=NULL,*consumertail=NULL;PCB*producerhead=NULL,*producertail=NULL;〃输入Z前定义为空〃产品数量intproductnum=0;intfull二0,empty二buffersize;//semaphorecharbuffer[buffersize];//缓冲区intbufferpoint=0;//缓冲区指针voidlinkqueue(PCB*process,PCB**tai

6、l);〃连接队列进程块准备指针PCB*getq(PCB*head,PCB**tail);〃定义头指针boolhasElement(PCB*pro);voiddisplay(PCB*p);voidlinklist(PCB*p,PCBTisthead);〃访问头指针voidfreelink(PCB*linkhead);boolprocessproc();boolwaitempty();boolwaitfull();voidsignalempty();voidsignalfull();voidproducerrun();voidcomsuerrun();boolhasEl

7、ement(PCB*pro);voidlinklist(PCB*p.PCB*listhead){PCB*cursor=listhead;while(cursor->processlink!=NULL){cursor=cursor->processlink;}cursor->processlink=p;}voidfreelink(PCB*linkhead)〃调用{PCB*p;while(linkhead!=NULL){p=linkhead;linkhead=linkhead・>processlink;free(p);〃释放指针}voidlinkqueue(PCB*pr

8、ocess,PCB**tail){if((*tail)!=NULL){(*tail)->processlink=process;(*tail)=process;}else{printf(”队列未初始化!“);}}PCB*getq(PCB*head,PCB**tail){PCB*p;p=head->processlink;〃头指针if(p!=NULL){head->processlink=p->processlink;p->processlink=NULL;指针为空if(head->processlink==NULL)elsereturnNULL;//否则,返回空

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。