课程设计:采用“读写平等”的策略演示“读者-写者”

上传人:公**** 文档编号:474082835 上传时间:2022-10-20 格式:DOC 页数:18 大小:237KB
返回 下载 相关 举报
课程设计:采用“读写平等”的策略演示“读者-写者”_第1页
第1页 / 共18页
课程设计:采用“读写平等”的策略演示“读者-写者”_第2页
第2页 / 共18页
课程设计:采用“读写平等”的策略演示“读者-写者”_第3页
第3页 / 共18页
课程设计:采用“读写平等”的策略演示“读者-写者”_第4页
第4页 / 共18页
课程设计:采用“读写平等”的策略演示“读者-写者”_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《课程设计:采用“读写平等”的策略演示“读者-写者”》由会员分享,可在线阅读,更多相关《课程设计:采用“读写平等”的策略演示“读者-写者”(18页珍藏版)》请在金锄头文库上搜索。

1、摘要 一个数据文件或记录可被多个进程共享,我们把只要求读该文件的进程称为“Reader进程”,其他进程则称为“Writer进程”。允许多个进程同时读一个共享文件,因为读操作不会使数据文件混乱。但不允许一个Writer进程和其他Reader进程或Writer进程同时访问共享对象,因为这种访问会引起混乱。所谓“读者写者问题”是指保证一个Writer进程必须与其他进程互斥的访问共享对象的同步问题。目录1. 概述42. 课程设计任务及要求52.1 设计任务52.2 设计要求52.3 任务分工53. 算法及数据结构6算法的总体思想6输入读/写者模块6查看读/写者模块63.4 主要的数据结构及数据74.1

2、 程序流程图94.2 程序代码104.3 实验结果155. 结论176. 收获、体会和建议186.1 黄宏亮心得体会186.2 林派腾心得体会187. 参考文献191. 概述 读写者问题,就是指读进程跟写进程同时访问共享一个对象的问题,将所有读者和所有写者分别存于一个读者等待队列和一个写者等待队列中,每当读允许时,就从读者队列中释放一个或多个读者线程进行读操作;每当写允许时,就从写者队列中释放一个写者进行写操作。读写平等策略,就是读进程跟写进程的优先级一样,当同时有读进程和写进程请求操作时,按链表的顺序让进程对该对象进行操作,读进程可多个同时进行,写进程只能有一个进行。2. 课程设计任务及要求

3、2.1 设计任务用高级语言编写和调试一个采用“读写平等”策略的“读者-写者”问题的模拟程序。2.2 设计要求1)读者与写者至少包括ID、进入内存时间、读写时间三项内容,可在界面上进行输入。2) 读者与写者均有两个以上,可在程序运行期间进行动态增加读者与写者。3) 可读取样例数据(要求存放在外部文件中),进行读者/写者、进入内存时间、读写时间的初始化。4) 要求将运行过程用可视化界面动态显示,可随时暂停,查看阅览室中读者/写者数目、读者等待队列、读写时间、等待时间。5) 读写策略:读写互斥、写写互斥、读写平等(严格按照读者与写者到达的顺序进入阅览室,有写者到达,则阻塞后续到达的读者;有读者到达,

4、则阻塞后续到达的写者)。2.3 任务分工时间成员姓名任务完成情况第1天上午黄宏亮功能分析,查找资料完成林派腾查找资料第1天下午黄宏亮参考资料,分析算法完成林派腾参考资料,分析算法第2天上午黄宏亮编写代码,调试代码完成林派腾调试代码,查找问题第2天下午黄宏亮测试功能,编写课程设计报告完成林派腾测试功能,编写并修改课程设计报告第3天上午黄宏亮完善课程设计报告完成林派腾完善课程设计报告3. 算法及数据结构三个线性链表,分别为h1、h2、h3。h1为写入序列,h2为就绪序列,h3为执行序列。其中h1用来存放输入进去的读者和写者的信息,h2根据读入内存的时间将h1中的读者写者的信息进行排序,并将排完序的

5、读者与写者信息存在h2中,把h2的内容调入到执行序列h3中,从而执行要求的内容。3.2输入读/写者模块 通过手动输入读写者的信息、包括读写者的进入内存时间、进程序号、读或写(r or w) 类型、开始时间、执行时间。数据结构 process *h1=NULL,*h2=NULL,*h3=NULL;/三个链表,分别用于存储各个进程的信息,存储就绪队列的进程信息,存储可执行的进程的信息3.2.3 算法 process *h1=NULL,*h2=NULL,*h3=NULL; int i,j; printf(tt输入进程数:); fp=fopen(file.txt,w+);scanf(%d,&i); f

6、printf(fp,%dn,i);for(j=1;i0;i-,j+)p=(process *)malloc(sizeof(process);q-next=p;printf(tt第%d个进程:n,j); printf(tt(按空格或回车隔开)n); printf(tt进程序号 读或写(r or w) 开始时间t 执行时间ntt); scanf(%d %c %d %d,&p-ID,&p-type,&p-starttime,&p-needtime);fprintf(fp,%d %c %d %dn,p-ID,p-type,p-starttime,p-needtime);printf(n);p-runt

7、ime=0;q=q-next;p-next=NULL;fclose(fp);p=h1;h1=h1-next;p-next=NULL;free(p);break;3.3查看读/写者模块 查询已输入的读写者信息数据结构Process *p,*q; /定义进程变量指针,用于存储读者写者信息 3.3.3 算法 int k; if(fp=fopen(file.txt,r)=NULL)printf(文件打开失败!n); main(); printf(tt进程序号 读或写(r or w) 开始时间t 执行时间n); fscanf(fp,%d,&i); k=0; for(j=0;i0;i-,j+) p=(pr

8、ocess *)malloc(sizeof(process);q-next=p;fscanf(fp,%d %c %d %d,&p-ID,&p-type,&p-starttime,&p-needtime);if(p-type=r|p-type=R) k+; printf(tt%dtt%ctt%dtt%dn,p-ID,p-type,p-starttime,p-needtime);p-runtime=0;q=q-next;p-next=NULL; j=j-k; printf(tt读者数目:); printf(t%dn,k); printf(tt写者数目:); printf(t%dn,j);fclos

9、e(fp);p=h1;h1=h1-next;p-next=NULL;free(p); main();break;3.4 主要的数据结构及数据int Wmutex=1;/互斥读写的信号量int readcount=0; /读者数目struct process/进程结构体int ID; /进程序号char type; /进程类别(判断是读者还是写者)int starttime; /进程开始时间int needtime; /进程读写需要的时间int runtime; /进程在内存中已运行的时间struct process *next;process *h1=NULL,*h2=NULL,*h3=NUL

10、L;/三个链表函数成员:void input()/输入信息函数int main()/主函数void choose()/选择函数void ready(int i)/进入就绪队列函数int wait(int &a)/等待队列函数void reader()/读写平等下的读者信息函数void writer()/读写平等下的写者信息函数void add(int i)/动态增加函数void print(int i)/输出函数void leave()/离开执行队列程序设计与实现4.1 程序流程图4.2 程序代码struct process /数据结构int ID; /进程序号char type; /进程类别

11、(判断是读者还是写者)int starttime; /进程开始时间int needtime; /进程读写需要的时间int runtime; /进程在内存中已运行的时间struct process *next;process *h1=NULL,*h2=NULL,*h3=NULL;void ready(int i) /进入就绪队列process *p,*q,*j,*k;p=h1;q=h2;int t=0;if(h2=NULL)q=h2=(process *)malloc(sizeof(process);q-next=NULL;t=1;elsewhile(q-next!=NULL)q=q-next;

12、j=(process *)malloc(sizeof(process);j-next=h1;while(h1-starttime=i)q-next=h1;h1=h1-next;q=q-next;q-next=NULL;j-next=h1;if(h1=NULL)break;p=h1;while(p!=NULL)if(p-starttime=i)k=j;while(k-next!=p)k=k-next;k-next=p-next;q-next=p;q=q-next;p=p-next;q-next=NULL;elsep=p-next;h1=j-next;j-next=NULL;free(j);if(t=1)p=h2;h2=h2-next;p-next=NULL;free(p);int wait(int &a) a-;if(a0)return 0;return 1;void signal(int &a)a+;void reader() /读写平等下的读者信息process *p;int t=0;p=h3;if

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 商业计划书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号