高响应比算法Word文档下载推荐.docx
- 文档编号:13273947
- 上传时间:2022-10-09
- 格式:DOCX
- 页数:9
- 大小:10.67KB
高响应比算法Word文档下载推荐.docx
《高响应比算法Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《高响应比算法Word文档下载推荐.docx(9页珍藏版)》请在冰豆网上搜索。
charbuffer[buffersize];
//缓冲区
intbufferpoint=0;
//缓冲区指针
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!
p=linkhead;
linkhead=linkhead->
free(p);
voidlinkqueue(PCB*process,PCB**tail)//初始化队列
if((*tail)!
=NULL)
{
(*tail)->
processlink=process;
(*tail)=process;
else{printf("
队列序列化!
"
);
PCB*getq(PCB*head,PCB**tail)
p=head->
if(p!
head->
processlink=p->
p->
processlink=NULL;
if(head->
processlink==NULL)(*tail)=head;
elsereturnNULL;
returnp;
boolprocessproc()//初始化进程
inti,f,num;
charch;
PCB*p=NULL;
PCB**p1=NULL;
printf("
\n请输入希望产生的进程个数:
scanf("
%d"
&
num);
getchar();
for(i=0;
i<
num;
i++)
printf("
\n请输入您要产生的进程:
输入1为生产者进程;
输入2为消费者进程\n"
scanf("
f);
getchar();
p=(PCB*)malloc(sizeof(PCB));
if(!
p){printf("
内存分配失败"
returnfalse;
flag=f;
processnum++;
numlabel=processnum;
state='
w'
;
if(p->
flag==1)
{
printf("
您要产生的进程是生产者,它是第%d个进程。
请您输入您要该进程产生的字符:
\n"
processnum);
scanf("
%c"
ch);
getchar();
p->
product=ch;
productnum++;
您要该进程产生的字符是%c\n"
p->
product);
}
else{
您要生产的进程是消费者,它是第%d个进程。
numlabel);
linkqueue(p,&
readytail);
returntrue;
boolhasElement(PCB*pro)//判断队列中是否有进程存在
if(pro->
processlink==NULL)returnfalse;
elsereturntrue;
boolwaitempty()//判断生产者等待队列是否为空
if(empty<
=0)
进程%d:
缓存区存数,缓存区满,该进程进入生产者等待序列\n"
exe->
linkqueue(exe,&
producertail);
returnfalse;
else{empty--;
returntrue;
voidsignalempty()//唤醒生产者进程
if(hasElement(producerhead))
p=getq(producerhead,&
等待中的生产者进程进入就绪队列,它的进程号是%d\n"
empty++;
boolwaitfull()//判断消费者等待进程队列是否为满
if(full<
缓存区取数,缓存区空,该进程进入消费者等待队列\n"
linkqueue(exe,&
consumertail);
else{full--;
voidsignalfull()//唤醒消费者进程
PCB*p;
if(hasElement(consumerhead)){
p=getq(consumerhead,&
linkqueue(p,&
printf("
等待中的消费者进程进入就绪队列,它的进程号是%d\n"
full++;
voidproducerrun()//生产者进程
if(!
waitempty())
return;
进程%d开始向缓冲区存数%c\n"
numlabel,exe->
buffer[bufferpoint]=exe->
product;
bufferpoint++;
进程%d向缓冲区存数操作结束\n"
signalfull();
linklist(exe,over);
voidcomsuerrun()//消费者进程
waitfull())
进程%d向缓冲区取数\n"
exe->
product=buffer[bufferpoint-1];
bufferpoint--;
进程%d向缓冲区取数操作结束,取数是%c\n"
signalempty();
voiddisplay(PCB*p)//显示进程
p=p->
while(p!
进程%d,它是一个"
flag==1?
生产者\n"
):
消费者\n"
p=p->
voidmain()
charterminate;
boolelement;
你想开始程序吗?
(y/n)"
terminate);
getchar();
readyhead=(PCB*)malloc(sizeof(PCB));
//初始化队列
if(readyhead==NULL)
readytail=readyhead;
readyhead->
flag=3;
consumerhead=(PCB*)malloc(sizeof(PCB));
if(consumerhead==NULL)return;
consumertail=consumerhead;
consumerhead->
flag=4;
producerhead=(PCB*)malloc(sizeof(PCB));
if(producerhead=NULL)return;
producertail=producerhead;
producerhead->
flag=5;
over=(PCB*)malloc(sizeof(PCB));
if(over==NULL)return;
over->
while(terminate=='
y'
)
processproc())break;
element=hasElement(readyhead);
while(element){
exe=getq(readyhead,&
进程%d申请运行,它是一个"
exe->
printf("
if(exe->
flag==1)producerrun();
elsecomsuerrun();
elemen
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 响应 算法
![提示](https://static.bdocx.com/images/bang_tan.gif)