- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
读者写入问题报告
操作系统实验报告实验名称:读者写入者问题班级:信卓1201班姓名:钟远维学号:U201213500日期:2014年11月5日实验目的1、熟练使用VC6.0编译环境,调试并正确运行程序;2、阅读演示程序源代码,熟悉阅读者和写入者问题流程;3、理解源程序中管理阅读者和写入者权限的算法,及相关窗口操作;4、掌握信号量的使用; 5、写出ReaderThread()和WriterThread()函数伪码。实验描述阅读者写入者问题描述:有一个公用的数据集,有很多人需要访问,其中一些需要阅读其中的信息,一些需要修改其中的消息。阅读者可以同时访问数据集,而写入者只能互斥的访问数据集,不能与任何的进程一起访问数据区。实验要求允许多个读者同时对文件执行读操作;只允许一个写者对文件执行写操作;任何写者在完成写操作前不允许其他读者或写者工作;写者在执行写操作前,应让已有的写者和读者全部退出。实验算法实现函数说明:1.1、DWORD WINAPI ReaderThread (LPVOID pVoid) 读者进程: 根据前面的资源分配策略,对于读进程;(a).我们初始化设置都是处于休息状态,然后要是资源可读,根据进程到来的快慢,分配资源给读者,是其从休息,等待到读状态,最后释放资源进入休息状态,一直循环。(b).一旦有一个读者进入临界区,我们就封锁临界区,可以让所用的读者进入,而不让写入者进入,并用一个资源控制readercount,保证每次只有一个进程对变量进行操作。这样,(c).直到每一个读者都读完,没有一个读者的时候,开始释放临界区,这样写入者就可以进入与读者进行资源的争夺,决定是读还是写。1.2、DWORD WINAPI WriterThread (LPVOID pVoid) 写入者进程: 与读者进程类似,从休息到等待最后写入,一直循环。其中只要一个写入进程进入临界区,其他进程就不能进入临界区了,直到写进程释放临界区。1.3、int ReaderAndWriter(void)用于建立互斥的信号对象(count),临界区和启动读出写入者的进程。2、伪代码:var mutex,wrt,Semaphore;//mutex是用于对计数器readercount操作的互斥信号量;wrt表示是否允许写的信号量readcount:integer;mutex=wrt=1;//(a).定义初始信号量readcount=0;//阅读者初值为0cobeginReaderi: //读者程序beginP(mutex); //创造临界区,使以下操作不被打断readcount=readcount+1; //等待阅读者加一if (readcount= =1) P(wrt);//(b).只要有一个阅读者就禁止写入V(mutex);读数据集P(mutex);Readcount——; //等待阅读者减一if readcount=0 V(wrt);//开放写入V(mutex);endWriteri: //写者程序beginP(wrt);写数据集;V(wrt); end; coend实验运行结果1、演示说明本程序主要用于说明阅读者写入者问题中的资源互斥访问的调动策略,并模仿其访问的过程。采用书上的伪码(如下)编制而成,实际上采用的是读优先策略。 2、界面说明 在程序编译运行后会出现中间一个大的圆圈表示公用的资源,上面一排五个矩形表示5个读者,下面的五个矩形表示五个写入者。每个读者和写入者都有3种状态,休息,等待和操作(读入或者写入)分别用黑颜色,绿颜色,红颜色表示休息,等待和操作。一旦操作者获得资源,可以进行读或者写,我们就划一条从操作者中心到资源中心的线,表示开始操作。(如上图)3、源程序算法实现调度说明: 1)、读者优先:即当同时有读出和写入等待时,优先使读者读消息,等到读者阅读完成后再进行写入操作; 2)、同时原则:可以同时多用户读出,但是不能多用户写入;Win32程序框架:六、实验总结通过本次实验,熟悉了操作系统并发进程的实现方法。采用信号量解决读者写入者问题这种解法读者是优先的,当存在读者时,写者将被延迟,且只要有一个读者活跃,随后而来的读者都将被允许访问文件,从而导致写者长时间等待,并有可能出现写者饥饿现象。增加信号量并修改此程序可得到写者具有优先权的解决方案,确保当一个写者进程声明想写时,不允许后面的新读者访问共享文件。这个实验主要考查的是对PV操作的理解以及对信号量、临界资源、临界区等概念的掌握;第一遍自行书写伪代码的时候,由于对课本不够熟悉,对基本的P(mutex)和V(mutex)应该同步出现以表示临界区都没有很好理解;再将概念弄清晰之后再看书上的伪码就很容易了。 在算法上使用的是阅读者优先算法,同时要想到也会有写入者
原创力文档


文档评论(0)