- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
摘要
一个数据文件或记录可被多个进程共享,把只要求读该文件的进程称为“Reader进程”,其他进程则称为“Writer进程”。允许多个进程同时读一个共享对象,因为读操作不会使数据文件混乱。但不允许一个Writer进程和其他Reader进程或Writer进程同时访问共享对象。因为这种访问会引起混乱。
所谓“读者-写者问题”指保证一个Writer进程必须与其他进程互斥地访问共享对象的同步问题。
目录
1. 概述 4
2.课程设计任务及要求 4
2.1 设计任务 4
2.2 设计要求 4
3. 算法及数据结构 4
3.1 算法的总体思想 4
3.2 键入读者/写者进程模块 5
3.3 读取读者/写者样例模块 6
3.4 查看读者写者信息模块 7
4. 程序设计与实现 7
4.1 程序流程图. 7
4.2 主要程序代码 8
4.3 实验结果 13
5. 结论 15
6. 收获、体会和建议。 15
6.1谢海钊的收获体会 15
6.2叶诗敏的收获体会 15
7. 参考文献。 15
概述
所谓读者写者问题,是指保证一个Writer进程必须与其他进程互斥地访问共享对象的同步问题。写优先的读者写者问题可以这样的描述,有一群写者和一群读者,写者在写同一本书,读者也在读这本书,多个读者可以同时读这本书,但是,只能有一个写者在写书,并且,写者的优先级必须比读者的大,也就是说,读者和写者同时提出请求时,写者优先执行。
课程设计任务及要求
设计任务
成员姓名 周三下午 周四上午 周四下午 周五上午 周五下午 谢海钊 查找相关资料 了解算法,调试代码 分析、修改代码 完善代码,测试 完善课程设计报告 叶诗敏 查找相关资料 了解算法,调试代码 写报告,画程序流程图 测试 完善课程设计报告
设计要求
读者与写者至少包括ID、进入内存时间、读写时间三项内容,可在界面上进行输入
读者与写者均有二个以上,可在程序运行期间动态增加读者与写者
可读取样例数据(要求存放在外部文件中),进行读者/写者、进入内存时间、读写时间的初始化
要求将运行过程用可视化界面动态显示,可随时暂停,查看阅览室中读者/写者数目、读者等待队列、写者等待队列、读写时间、等待时间
读写策略为:读写互斥、写写互斥、写优先(只要写者到达,就阻塞后续的所有读者,一旦阅览室无人,写者能最快进入阅览室;在写者未出阅读室之前,又有新的读者与写者到达,仍然是写者排在前面)
算法及数据结构
算法的总体思想
本算法主要使用互斥信号量机制,解决读者写者同步问题。本算法通过创建三个链表process1,process2和process3,process1用于存储各个进程的信息,process2用于存储就绪队列的进程信息,process3用于存储正在执行的进程的信息。通过使用整形变量来模拟时间片,每次时间片一开始,通过ready()函数将进程拉入就绪队列。然后根据判断就绪队列的开头是读者还是写者,来调用相应的进程Reader()或Writer()。如果调用的是Writer(),就得调用sort()函数对就绪队列进程进行排序,将写者排在读者前面。当时间片结束时,对各个进程的执行时间加1,并判断进程是否执行完毕,如果完毕就将其退出运行进程链表process3。最后将时间片加一,反复循环,直到所有进程执行完毕。
本系统主要有三个模块,键入读者写者进程模块、读取读者写者样例模块、查看读者写者信息模块。
定义进程结构体:
struct Process {
int name; //进程序号
char type; //进程类别(判断是读者进程还是写者进程)
int starttime; //进程开始执行时间
int needtime; //进程读写需要的时间
int runtime;//进程已在内存中运行的时间
struct Process *next; //指向下一个进程的指针
};
键入读者/写者进程模块
功能
数据结构算法
读取读者/写者样例模块
功能
数据结构
算法
查看读者写者信息模块
功能数据结构Process *p,*q; //定义进程变量指针,用于存储读者写者信息
算法
程序设计与实现
程序流程图.
主要程序代码
struct Process //定义结构体
{ int name; //进程序号
char type; //进程类别(判断是读者还是写者)
int starttime;
文档评论(0)