读者和写者问题
更新时间:2024-01-20 14:33:01 阅读量: 教育文库 文档下载
课 程 设 计
课程名称
操作系统 学 院 计算机科学与技术学院
专 业
软件工程专业
班 级 姓 名 指导教师
2014——2015学年 第1学期
学 号:
1
目录
目 录 .................................................................................................................................... 错误!未定义书签。 1 设计概述................................................................................................................................................................... 3 1.1问题描述: ........................................................................................................................................................ 3 1.2问题解读及规则制定 ........................................................................................................................................ 3 2课程设计目的及功能 ................................................................................................................................................ 3 2.1 设计目的 ........................................................................................................................................................... 3 2.2 设计功能 ........................................................................................................................................................... 3 3模块介绍.................................................................................................................................................................... 3 3.1函数原型 ............................................................................................................................................................. 3 3.2 PV操作代码 ....................................................................................................................................................... 4 4测试用例,运行结果与运行情况分析 .................................................................................................................... 6 4.1测试用例 ............................................................................................................................................................ 6 4.2运行结果 ............................................................................................................................................................ 7 4.3运行情况分析 .................................................................................................................................................... 9 5自我评价与总结 ........................................................................................................................................................ 9 6 参考文献................................................................................................................................................................. 10 7 附录:(完整代码) ............................................................................................................................................. 10
2
实现读者写者(Reader-Writer Problem)问题
1 设计概述
1.1问题描述:
通过研究Linux的线程机制和信号量实现读者写者(Reader-Writer)问题并发控制。
1.2问题解读及规则制定
一个数据文件或记录可被多个进程所共享,我们将其中只要求读该文件的进程称为读者,其他进程称为写者.多个读者和多个写者进程在某个时间段内对该文件资源进行异步操作,也就是说允许多个进程同时读一个共享对象,但不允许一个写进程和其他读进程或写进程同时访问共享对象,因此,所谓\读者--写者问题\就是指必须保证一个写进程和其他进程(写进程或者读进程)互斥地访问共享对象的同步问题.两者的读写操作限制规则如下:
(1) 写--写互斥,即不允许多个写着同时对文件进行写操作
(2) 读--写互斥,即不允许读者和写者同时对文件分别进行读写操作 (3) 读—读允许,即允许多个读者同时对文件进行读操作
2课程设计目的及功能
2.1 设计目的
通过实验模拟读者和写者之间的关系,了解并掌握他们之间的关系及其原理。由此增加对进程同步的问题的了解。具体如下:
1)掌握基本的同步互斥算法,理解读者和写者模型 2)了解多线程的并发执行机制,线程间的同步和互斥
2.2 设计功能:
利用模拟用信号量机制实现读者和写者问题:通过用户控制读进程和写进程,反应读者和写者问题中所涉及的进程的同步与互斥。
3模块介绍
3.1函数原型
读者和写者进程由11个函数组成,分别如下: (附件包含全部具体实现)
void P_write(int); void write(int); void V_write(int); void P_radd(int);
3
void radd(int); void P_read(int); void V_radd(int); void read(int); void P_rsub(int); void rsub(int); void V_read(int); void V_rsub(int);
3.2 PV操作代码:
模拟写者对Wmutex的P操作,同时为写者进程也作写的入口:void P_write(int i) { Wmutex--; if(Wmutex<0) { w_wait[-Wmutex-1]=i; } else write(i); }
模拟写者对Wmutex的V操作,写操作完成的时候调用: void V_write(int i) { w[i]=0; Wmutex++; if(Wmutex<=0) { int k,j; if((w_wait[0]>=0)&&(w_wait[0] 模拟读之前对Rmutex的P操作,同时也作为读者进程的入口:void P_radd(int i) { 4 Rmutex--; if(Rmutex<0) { r_wait[-Rmutex]=i; } else radd(i); } 模拟读者对Wmutex的P操作: void P_read(int i) { Wmutex--; if(Wmutex<0) { w_wait[-Wmutex-1]=10; r_wait[0]=i; } else V_radd(i); } 模拟读之前对Rmutex的V操作: void V_radd(int i) { Rmutex++; if(Rmutex<=0) { int k,j; j=r_wait[0]; for(k=0;k 模拟读之后对Rmutex的P操作,读操作完成的时候调用:void P_rsub(int i) { r[i]=0; Rmutex--; rsub(i); } 模拟读者对Wmutex的V操作: void V_read(int i) { Wmutex++; if(Wmutex<=0) { int k,j; 5 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 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 if(Wmutex<0) //表示如果Wmutex<0,则该写者进入等待队列 { w_wait[-Wmutex-1]=i; } else write(i); } void write(int i) { w[i]=1; } void V_write(int i) { w[i]=0; Wmutex++; if(Wmutex<=0) // 表示如果Wmutex<=0,则从等待队列中选择写者或读者进行操作 { int k,j; if((w_wait[0]>=0)&&(w_wait[0] void P_radd(int i) { Rmutex--; if(Rmutex<0) // 表示如果Rmutex<0,则进入等待队列 { r_wait[-Rmutex]=i; } else radd(i); 11 } void radd(int i) { readCount++; if(readCount==1) P_read(i); else V_radd(i); } void P_read(int i) { Wmutex--; if(Wmutex<0) // 表示如果Wmutex<0,则进入等待队列 { w_wait[-Wmutex-1]=10; r_wait[0]=i; } else V_radd(i); } void V_radd(int i) { Rmutex++; if(Rmutex<=0) //表示如果Rmutex<=0,则从等待队列中选择读者进入readCount的临界区 { int k,j; j=r_wait[0]; for(k=0;k void read(int i) { r[i]=1; } void P_rsub(int i) { r[i]=0; 12 Rmutex--; rsub(i); } void rsub(int i) { readCount--; if(readCount==0) V_read(i); else V_rsub(i); } void V_read(int i) { Wmutex++; if(Wmutex<=0) //表示如果Wmutex<=0,则从等待队列中选择写者或读者进行操作 { int k,j; if((w_wait[0]>=0)&&(w_wait[0] void V_rsub(int i) { Rmutex++; } int main() { using namespace std; cout<<\请输入写者个数(1到10):\ cin>>w_num; while(w_num<1||w_num>10) 13 { cout<<\输入有误,请重新输入写者个数(1到10):\ cin>>w_num; }//完成对写者个数的输入 cout<<\请输入读者个数(1到10):\ cin>>r_num; while(r_num<1||r_num>10) { cout<<\输入有误,请重新输入读者个数(1到10):\ cin>>r_num; }//完成对读者个数的输入 int x,k,j,a[20]; while(1) { cout<<\ for(k=0;k<20;k++) a[k]=0; cout<<\Rmutex=\ for(k=0;k if(w_wait[0]==-1) cout<<\等待队列中无对象\ else { cout<<\等待队列中有:\ for(k=0;k 14 for(k=0;k 15 if(w[k]==0) P_write(k); else V_write(k); break; } } for(k=0;k if(x==(w_num+r_num+1)) return 0; } } 16 if(w[k]==0) P_write(k); else V_write(k); break; } } for(k=0;k if(x==(w_num+r_num+1)) return 0; } } 16
正在阅读:
读者和写者问题01-20
数据、模型和决策案例04-01
全能职业人2011病理学(中级)试卷笔记10-22
我爱运动会作文600字07-11
数据结构经典习题--每章都有12-02
专升本市场营销学真题及答案04-13
工具与文献网上作业_填空05-16
《体育科研方法》课程教学提纲05-08
拱式渡槽施工方案06-26
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 读者
- 问题
- 2017年人教版小学三年级下册数学期末考试卷
- 《金融学》习题(第9-10章)
- 数据库实验三
- 山东教育出版社小学信息技术五年级上册教案 全册
- 安保科工作手册
- 2016-2021年啤酒专用麦芽市场前景预测及投资规划分析报告(目录)
- 班主任工作手册(已填) - 图文
- 研究报告-2018-2024年便携式空气呼吸器行业市场发展前景预测与投资战略规划分析(目录) - 图文
- 关 于 外 经 贸 试 点 企 业 内 部 职 工 持 股 会 登 记 管 理 问 题 的 暂 行 规 定
- M1-M5课后练习句子翻译
- 整式的乘法
- 人教版六年级下册语文全册教案(三维目标)
- 七年级数学下册1.4三元一次方程组教案(新版)湘教版
- 教你如何辨别真伪芬达吉他?
- 剑桥雅思-剑4~剑8阅读的所有同义词转换
- 申论阅卷标准
- 1、建筑间距、建筑退让技术规范(送审稿)2006-9-5
- 台北县板桥市海山国民小学 - 图文
- 物理化学期末考试题库(上下册)
- 新时代城市管理存在的问题及对策建议