操作系统原理课程设计读者-写者问题的实现.docVIP

操作系统原理课程设计读者-写者问题的实现.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统原理课程设计读者-写者问题的实现

******************* 实践教学 ******************* 兰州理工大学 计算机与通信学院 2012年秋季学期 操作系统原理课程设计 题 目: 读者-写者问题的实现 专业班级: 姓 名: 学 号: 指导教师: 成 绩: 目录 摘 要 2 1. 设计思想 3 2. 各模块的伪码算法 4 3. 函数关系调用图 6 4. 程序测试结果 7 设计总结 10 参考文献 11 致 谢 12 摘 要 本设计的读者写者问题是指Reader进程只能读数据区中的数据,而writer进程必须与其他进程互斥地访问共享对象的同步问题。 读者写者问题可以这样的描述, 有一群写者和一群读者, 写者在写同一本书, 读者也在读这本书, 多个读者可以同时读这本书但是,只能有一个写者在写书 并且读者必写者优先,也就是说读者和写者同时提出请求时,读者优先当读者提出请求时需要有一个互斥操作, 另外, 需要有一个信号量来当前是否可操作本设计方案就是通过利用记录型信号量对读者写者问题的解决过程进行模 拟演示形象地阐述记录型信号量机制的工作原理用高级语言编写和调试一个程序,以加深对的理解。通过用C语言模拟实现,加深理解有关机制的概念。在 Windows环境下,创建一个包含n个线程的控制台进程用这n个线每个线程按相应测试数据文件的要求进行读写操作程来表示 n 个读者或写者请用信号量机制分别实现读者优先和写者优先的读者-写者问题将所有的读者和所有的写者分别放进两个等待队列中当读允许时就让读者队列释放一个或多个读者,当写允许时释放第一个写者操作读者-写者的读写限制(包括读者优先和写者优先) 1)写-写互斥,即不能有两个写者同时进行写操作2)读-写互斥,即不能同时有一个读者在读,同时却有一个写者在写3)读读允许,即可以有 2 个以上的读者同时读rwmutex 用于写者与其他读者/写者互斥的访问共享数据 rmutex? 用于读者互斥的访问 读者计数器 readcount semaphore rwmutex=1, rmutex=1; int readcount = 0;?????? reader i? //读者进程 i=1,2,…. ? do{ P(rmutex); ? //读者互斥 readcount++; //读者数加1 if (readcount == 1) P(rwmutex); ??//读者写者互斥? V(rmutex); 读者读数据; P(rmutex); Readcount--; ? if (readcount == 0) V(rwmutex); ?? V(rmutex); }while(1); ?????? writer j //写者进程 j = 1,2,…. ?????? ? do{ P(rwmutex); ?? 写文件; ?? V(rwmutex); ?????? }while(1); 写者优先算法: 设置三个互斥信号量: rwmutex 用于写者与其他读者/写者互斥的访问共享数据 ?rmutex? 用于读者互斥的访问 读者计数器readcount? ?nrmutex 用于写者等待已进入读者退出,所有读者退出前互斥写操作 semaphore rwmutex= 1,rmutex= 1,nrmutex= 1; int readcount = 0; reader i? //读者进程 i=1,2,…. do{ P(rwmutex);?? P(rmutex);???? readcount++; if (readcount == 1) P(nrmutex); //有读者进入,互斥写操作 V(rmutex); V(rwmutex);//及时释放读写互斥信号量,允许其它读、写进程申请资源 读数据; P(rmutex); readcount--; if (readcount == 0) V(nrmutex); //所有读者退出,允许写更新 V(rmutex); ??}while(1); writer j //写者进程 j = 1,2,…. do{ P(rwmutex);? // 互斥后续其它读者、写者 P(nrmutex); ?//如有读者正在读,等待所有读者读完 写更新; V(nrmutex); ??//允许后续新的第一个读者进入后互斥写操作 V(rwmutex);? //允许后续新读者及其它写者 ?????}while(1); 3. 函数关系调用图 图1 函数关

文档评论(0)

aicencen + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档