计算机操作系统进程同步算法讲解.doc

计算机操作系统进程同步算法讲解.doc

ID:56281910

大小:40.00 KB

页数:4页

时间:2020-06-05

计算机操作系统进程同步算法讲解.doc_第1页
计算机操作系统进程同步算法讲解.doc_第2页
计算机操作系统进程同步算法讲解.doc_第3页
计算机操作系统进程同步算法讲解.doc_第4页
资源描述:

《计算机操作系统进程同步算法讲解.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)#include

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("

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

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

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