基于C++的读者与写者问题read—write problem的实现(一)(7)
作者:佚名; 更新时间:2019-07-20

sp;ReaderPriority("thread.dat");
  else
   WriterPriority("thread.dat");
  printf("\nPress Any Key to Coutinue:");
  _getch();
  system("cls");
}
 return 0;
}

4.2.thread.dat //辅助的文件,但是必不可以少
 
 1  r   3  5
 2  w   4  5
 3  r   5   2
 4  r   6   5
 5  w   5.1  3
 


5.运行结果与运行情况
   对源程序进行编译,链接后,执行程序:


 当选择1 Reader Priority 时,程序运行结果如下:
 

按任意建后会到主界面,然后选择2.Writer Priority 后,程序运行结果如下:
   

6.调试记录
 在编程过程中,没有设置计数器来存储读者数目,结果在程序运行时,产生了读者与读者的互斥。之后通过翻阅资料,了解了需要加入计数器来控制读者与读者之间的同等优先,同时也用于控制写者进程的释放,既当计数器为0的时候,允许写进程访问文件。
 在加入计数器后,重新编写程序,就解决了以上问题。当程序通过编译链接之后,运行程序,得到了正确的结果。然后修改文件thread.dat中的参数:
1 R 3 4
2 R 4 3
3 W 4 5
 重新对程序进行测试,分别选择读者优先和写者优先,结果正确。
 最后修改文件thread.dat中的参数,使用更多的读写请求:
1 W 2 5
2 R 3 4
3 W 5 3
4 R 6 5
5 R 7 4
6 W 9 5
7 R 11 4
8 R 14 5
9 W 17 6
10 R 20 5
   运行程序的结果都正确。读者写者问题程序设计成功。
7.自我评析和总结
 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.
 操作系统的出现,使用和发展是近四十余年来计算机软件的一个重大进展。操作系统中引入并发程序设计技术后,程序的执行不在是顺序的。一个程序未执行完而另一个程序便已开始执行,程序挖补的顺序特性消失,程序与计算不再一一对应,所以操作系统引进进程概念来描述这种变化。读者与写者问题就是一个经典的并发程序设计问题。
 在开始做课程设计时,我首先翻阅了很多关于并发程序的书籍,找到了基本的解决方法,那就是信号量的使用。记录型信号量和PV操作不仅可以解决进程的互斥,而且更是实现进程同步的有力工具。但是发现光有信号量是解决不了读者和写者问题,因为所有读进程不会相互互斥。所以程序对信号量进行了改进。引入了一个计数器,记录读者的数目,控制是否释放写者进程。
 做到这些,思路已经基本确定。在变成过程中查阅了许多书籍,也对WINDOWS下的一些API做了些了解。
 接近2周的课程设计,让我学到了不少东西,从开始的查阅书籍,确定思路,到最后的编写程序和调试。设计过程中遇到了不少困难,但在同学和老师的帮助下都一一克服了。
 总之,每一次课程设计不仅是我们学习的好机会,而且是我们锻炼实际动手能力的平台,虽然有难度的东西总会让人很抵触,比如在课设过程中有很多郁闷的时候,一个小小的错误一不小心就花去了自己一上午的时间,所以在这个过程中能够磨练人的意志与耐心,最后感谢老师的指导与监督,使我在课程设计过程中学到了书本是学不到的知识,同时也对操作系统有了更深刻的认识,为以后的学习打下了坚实的基础。

核心期刊快速发表
Copyright@2000-2030 论文期刊网 Corporation All Rights Reserved.
《中华人民共和国信息产业部》备案号:ICP备07016076号;《公安部》备案号:33010402003207
本网站专业、正规提供职称论文发表和写作指导服务,并收录了海量免费论文和数百个经国家新闻出版总署审批过的具有国内统一CN刊号与国际标准ISSN刊号的合作期刊,供诸位正确选择和阅读参考,免费论文版权归原作者所有,谨防侵权。联系邮箱:256081@163.com