读者和写者问题(2)

2019-08-30 17:06

if((w_wait[0]>=0)&&(w_wait[0]

模拟读之后对Rmutex的V操作: void V_rsub(int i) { Rmutex++; }

4测试用例,运行结果与运行情况分析

4.1测试用例

测试用例如下: 1、输入写者个数:4 2、输入读者个数:2

3、写者1申请写操作,此时状态:写者1正在写

4、读者1申请读操作,此时状态:写着1正在写,读者1等待 6、写者1完成写操作,此时状态:读者1正在读

7、读者2申请读操作,此时状态:读者1正在读,读着2正在读

8、写者3申请写操作,此时状态:读者1正在读,读者2正在读,写着3等待9、读者1完成读操作,此时状态:读者2正在读,写着3等待 10、读者2完成读操作,此时状态:写者3正在写

11、写者2申请写操作,此时状态:写者3正在写,写者2等待 12、写者3完成写操作,此时状态:写者2正在写 13、写者2完成写操作,此时状态:无读无写

14、写者4申请写操作,此时状态:写者4正在写

15、读者1申请读操作,此时状态:写着4正在写,读者1等待

16、读者2申请读操作,此时状态:写着1正在写,读者1等待,读者2等待 17、写者4完成写操作,此时状态:读者1正在读,读者2正在读 18、结束

6

4.2运行结果

运行结果如图:

7

8

4.3运行情况分析

当有读者对文件读时,写操作等待,读操作执行 当有写者对文件写时,读操作等待,写操作等待 完全符合限制规则及实际应用

5自我评价与总结

本次设计中,用C++编程模拟了用信号量机制实现读者和写者问题。

总的来说,通过本次设计收获很大。读者和写者问题,一直认为这些东西很简单,但

9

是具体编程实现其模拟并不容易。虽然这还不算真正的实践,但通过这次设计,向实践靠近了一步。更加深刻的理解了操作系统中这些理论知识的意义。同时也让我温习以前所学习的高级语言。

6 参考文献

[1] 报刊《计算机教育》文章编号1672-5913(2011)22-0056-03,《操作系统课程之“读者-写着”问题教学探讨》

[2] 严蔚敏,吴伟民著,数据结构(c++版)北京:清华大学出版社,2007

7 附录:(完整代码)

#include int r_num;//读者个数 int w_num;//写者个数

int Wmutex=1;//表示允许写或允许读 int readCount=0;//表示正在读的进程数 int Rmutex=1;//表示对Rcount的互斥操作

int r[10]={0,0,0,0,0,0,0,0,0,0};//表示读者的状态,1表示正在读 int w[10]={0,0,0,0,0,0,0,0,0,0};//表示写者的状态,1表示正在写

int w_wait[11]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};//表示等待队列,0-9表示写者,10时需引入读者的等待队列,-1表示空

int r_wait[11]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};//读者的等待队列,0-9表示对应的读者,-1为空

void P_write(int);//模拟写者对Wmutex的P操作,同时也作为写者进程的入口 void write(int);//开始写操作

void V_write(int);//模拟写者对Wmutex的V操作,写操作完成的时候调用

void P_radd(int);//模拟读之前对Rmutex的P操作,同时也作为读者进程的入口 void radd(int);//readCount加1

void P_read(int);//模拟读者对Wmutex的P操作 void V_radd(int);//模拟读之前对Rmutex的V操作 void read(int);//读操作

void P_rsub(int);//模拟读之后对Rmutex的P操作,读操作完成的时候调用 void rsub(int);//readCount减1

void V_read(int);//模拟读者对Wmutex的V操作 void V_rsub(int);//模拟读之后对Rmutex的V操作

void P_write(int i) { Wmutex--; 10


读者和写者问题(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2018年最新人教版六年级语文下册第二单元测试卷及答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: