欢迎来到天天文库
浏览记录
ID:56281910
大小:40.00 KB
页数:4页
时间:2020-06-05
《计算机操作系统进程同步算法讲解.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1、进程同步算法:读者写者问题算法描述:设置一个标记,如果写者没有处于写的状态,则任何读书都可以进行读操作,即支持N个读者线程。#defineNULL0#defineRUN1#defineLENsizeof(structpcb)#include#include/**************定义一个pcb的结构体***********/typedefstructpcb{intid;/*进程标识*/charname[10];/*进程名*/intpriority;/*优先数*/intcputime;/*已占用CPU的时间片数*/int
2、alltime;/*进程所需的时间片数*/charstatus;/*进程状态指针*/structpcb*next;};Voidmain(){intSTATUS=1;/*全局变量,一个锁状态*/if(STATUS!=0)/*创建读者进程*/{structpcb*pcbcreat(void){structpcb*p;inti;for(i=1;i<4;i++)/*创建三个读者进程进程*/{p=(structpcb*)malloc(LEN);printf("inputthepcb%d:",i);scanf("%d%s%d%d",&p->id,&p->name,&p->p
3、riority,&p->alltime);输入进程的id号,名称,优先级和占用时间*/insert(p);/*插入*/}}}ElsePrint(“抱歉,读者正在进行更新”);/*写者进程存在或创建写者进程*//*当写者进程被杀死时或者不存在写者进程时,STATUS要改为1*/} 2.进程调度算法先来先服务调度算法算法描述:用一个队列式的数据结构处理排队问题,每一个排队者占用一个进程。#include#defineMAXLEN10#defineNULL0#defineRUN1#defineLENsizeof(structpcb)#include4、dio.h>#include/**************定义一个pcb的结构体***********/typedefstructpcb{intid;/*进程标识*/charname[10];/*进程名*/intpriority;/*优先数*/intcputime;/*已占用CPU的时间片数*/intalltime;/*进程所需的时间片数*/charstatus;/*进程状态指针*/structpcb*next;};typedefintelementtype;typedefstruct/*队列的顺序存储结构定义*/{elementtypeelem5、ent[MAXLEN];/*存放队列元素的数组*/intfront,rear;/*队列头、尾指针*/}SeQueue;SeQueueInitQueue_sq()/*建立一个空队列q*/{SeQueueq;q.front=-1;q.rear=-1;return(q);}intGetFront_sq(SeQueue*q,elementtype*x)/*取队头元素,若队列q非空,用*x返回其元素*/{if(q->front==q->rear)return(0);/*队列空返回0*/else{*x=q->element[(q->front)+1];return(1);}}i6、ntEnqueue_sq(SeQueue*q,elementtypex)/*入队列操作,若队列q未满,将元素x入队*/{if(q->rear==MAXLEN-1)return(0);/*队列满返回0*/q->rear++;q->element[q->rear]=x;return(1);}intEmpty_sq(SeQueue*q)/*判断队列q是否为空,空则返回1,非空返回0*/{return(q->front==q->rear);}voidprint(SeQueueq)/*输出队列q元素*/{inti;if(q.front!=q.rear)/*队列非空,输出队列元7、素*/{printf("Outputelementsofqueue:");for(i=q.front+1;i<=q.rear;i++)printf("%d",q.element[i]);}elseprintf("Thequeueisempty!!!");printf("");}main()/*主程序*/{SeQueuequeue;inti;elementtypey;elementtypez;queue=InitQueue_sq();/*建立空队列queue*/if(Empty_sq(&queue)!=0)/*判断队列queue是否为空*/printf("
4、dio.h>#include/**************定义一个pcb的结构体***********/typedefstructpcb{intid;/*进程标识*/charname[10];/*进程名*/intpriority;/*优先数*/intcputime;/*已占用CPU的时间片数*/intalltime;/*进程所需的时间片数*/charstatus;/*进程状态指针*/structpcb*next;};typedefintelementtype;typedefstruct/*队列的顺序存储结构定义*/{elementtypeelem
5、ent[MAXLEN];/*存放队列元素的数组*/intfront,rear;/*队列头、尾指针*/}SeQueue;SeQueueInitQueue_sq()/*建立一个空队列q*/{SeQueueq;q.front=-1;q.rear=-1;return(q);}intGetFront_sq(SeQueue*q,elementtype*x)/*取队头元素,若队列q非空,用*x返回其元素*/{if(q->front==q->rear)return(0);/*队列空返回0*/else{*x=q->element[(q->front)+1];return(1);}}i
6、ntEnqueue_sq(SeQueue*q,elementtypex)/*入队列操作,若队列q未满,将元素x入队*/{if(q->rear==MAXLEN-1)return(0);/*队列满返回0*/q->rear++;q->element[q->rear]=x;return(1);}intEmpty_sq(SeQueue*q)/*判断队列q是否为空,空则返回1,非空返回0*/{return(q->front==q->rear);}voidprint(SeQueueq)/*输出队列q元素*/{inti;if(q.front!=q.rear)/*队列非空,输出队列元
7、素*/{printf("Outputelementsofqueue:");for(i=q.front+1;i<=q.rear;i++)printf("%d",q.element[i]);}elseprintf("Thequeueisempty!!!");printf("");}main()/*主程序*/{SeQueuequeue;inti;elementtypey;elementtypez;queue=InitQueue_sq();/*建立空队列queue*/if(Empty_sq(&queue)!=0)/*判断队列queue是否为空*/printf("
此文档下载收益归作者所有