![操作系统实验-读者写者问题_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-3/27/9b2bf672-0ce5-418d-bb8c-cdc099754c72/9b2bf672-0ce5-418d-bb8c-cdc099754c721.gif)
![操作系统实验-读者写者问题_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-3/27/9b2bf672-0ce5-418d-bb8c-cdc099754c72/9b2bf672-0ce5-418d-bb8c-cdc099754c722.gif)
![操作系统实验-读者写者问题_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-3/27/9b2bf672-0ce5-418d-bb8c-cdc099754c72/9b2bf672-0ce5-418d-bb8c-cdc099754c723.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统实验-读者写者问题计算机操作系统实验报告 题 目 读者写者问题 学院(部) 信息学院 专 业 计算机科学与技术 班 级 学生姓名 学 号 指导教师(签字) 一、 问题描述一个数据文件或者记录,可以被多个进程共享,我们把只要求读该文件的进程称为“Reader进程”,其他进程则称为“Writer进程”。允许多个进程同时读一个共享对象,因为读操作不会是数据文件混乱。但不允许一个Writer进程和其他Reader进程或者Writer进程同时访问共享对象,因为这种访问将会引起混乱。所谓“读者写着问题(ReaderWriter Problem)”是指保证一个Writer进程必须与其他进程互斥地访问
2、共享对象的同步问题二、 解决问题为实现Reader与Writer进程间在读或写是的互斥而设置了一个互斥的信号量Wmutex。另外,在设置一个整型变量Readcount表示正在读的进程数目。由于只要有一个Reader进程在读,便不允许Writer去写。因此,仅当Readercount=0时,表示尚无Reader进程在读时,Reader进程才需要进行Wait(wmutex)操作。若Wait(Wmutex)操作成功,Reader进程便可去读,相应地,做Readcount+1操作。同理,仅当Reader进程在执行了Readercount-1操作后其值为0时,才执行Signal(Wmutex)操作,以便
3、让Writer进程写。又因为Readercount是一个可被多个Reader进程访问的临界资源,因此也应该为它设置一个互斥信号量rmutex。三、 代码实现1、读者优先#include<iostream>#include<>using namespace std;CRITICAL_SECTION rmutex,wmutex;int wr;int readernum;DWORD WINAPI reader(LPVOID IpParamter)cout<<"读者申请n"wr+;EnterCriticalSection(&rmutex)
4、;if(readernum=0)EnterCriticalSection(&wmutex);readernum+;cout<<"读者进入成功正在读取n"LeaveCriticalSection(&rmutex);Sleep(2000);EnterCriticalSection(&rmutex);readernum-;cout<<"读者退出n"wr-;if(readernum=0)LeaveCriticalSection(&wmutex);LeaveCriticalSection(&rmute
5、x);return 0;DWORD WINAPI writer(LPVOID PM)cout<<"写者申请n"while(wr!=0)EnterCriticalSection(&wmutex); cout<<"写者已进入正在写入n"Sleep(500);cout<<"写者退出n"LeaveCriticalSection(&wmutex);return 0;int main()readernum=0;wr=0;InitializeCriticalSection(&rmutex)
6、;InitializeCriticalSection(&wmutex);HANDLE hr5;/定义读者线程HANDLE hw5;/定义写者线程/int thnum;int drn=0; /输入的读者个数int dwn=0; /输入的写者个数cout<<"输入读者写者线程 1代表读者 2代表写者 0代表结束"<<endl;int th10;int num=0;cin>>thnum;while(thnum)if(thnum=1)drn+;if(thnum=2)dwn+;num+;cin>>thnum;int hr1=0,
7、hw1=0;for(int j=0;j!=num;j+)if(thj=1)hrhr1=CreateThread(NULL,0,reader,NULL,0,NULL);hr1+;if(thj=2)hwhw1=CreateThread(NULL,0,writer,NULL,0,NULL);hw1+;WaitForMultipleObjects(drn, hr, TRUE, INFINITE);WaitForMultipleObjects(dwn, hw, TRUE, INFINITE);for(int i=0;i!=drn;i+)CloseHandle(hri);for(int i=0;i!=dw
8、n;i+)CloseHandle(hwi);DeleteCriticalSection(&rmutex);DeleteCriticalSection(&wmutex);return 0;2、写者优先#include<iostream>#include<>using namespace std;CRITICAL_SECTION rmutex,wmutex;int ww;int readernum;DWORD WINAPI reader(LPVOID IpParamter)cout<<"读者申请n"while(ww!=0)En
9、terCriticalSection(&rmutex);if(readernum=0)EnterCriticalSection(&wmutex);cout<<"读者进入成功正在读取n"readernum+;LeaveCriticalSection(&rmutex);Sleep(2000);EnterCriticalSection(&rmutex);readernum-;if(readernum=0)LeaveCriticalSection(&wmutex);cout<<"读者退出n"Leav
10、eCriticalSection(&rmutex);return 0;DWORD WINAPI writer(LPVOID PM)ww+;cout<<"写者申请n"EnterCriticalSection(&wmutex); cout<<"写者已进入正在写入n"Sleep(1000);cout<<"写者退出n"ww-;LeaveCriticalSection(&wmutex);return 0;int main()readernum=0;ww=0;InitializeCrit
11、icalSection(&rmutex);InitializeCriticalSection(&wmutex);HANDLE hr5;/定义读者线程HANDLE hw5;/定义写者线程int drn=0; /输入的读者个数int dwn=0; /输入的写者个数cout<<"输入读者写者线程 1代表读者 2代表写者 0代表结束"<<endl;int th10;int num=0;cin>>thnum;while(thnum)if(thnum=1)drn+;if(thnum=2)dwn+;num+;cin>>thn
12、um;int hr1=0,hw1=0;for(int j=0;j!=num;j+)if(thj=1)hrhr1=CreateThread(NULL,0,reader,NULL,0,NULL);Sleep(10);hr1+;if(thj=2)hwhw1=CreateThread(NULL,0,writer,NULL,0,NULL);Sleep(10);hw1+;WaitForMultipleObjects(drn, hr, TRUE, INFINITE);WaitForMultipleObjects(dwn, hw, TRUE, INFINITE);for(int i=0;i!=drn;i+)CloseHandle(hri);for(int i=0;i!=dwn;i+)CloseHandle(hwi);DeleteCriticalSection
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 污水干管改造项目管理方案
- 电商平台的客服体系建设与优化研究
- Module10 Unit2第一课时 教学设计 - 2024-2025学年外研版英语八年级上册
- 电商平台安全珠宝交易的保障措施
- 危重病人护理安全
- Unit 7 Section B reading 教学设计-2024-2025学年人教版八年级英语上册
- 现代环境科学实验室的设施与设备介绍
- 人教版九年级上册化学教案
- 废弃煤矿地下水污染防控措施
- 保险中介服务项目融资计划书
- 打印版 《固体物理教程》课后答案王矜奉
- 高端公寓住宅项目营销策划方案(项目定位 发展建议)
- 执业兽医师聘用协议(合同)书
- 第1本书出体旅程journeys out of the body精教版2003版
- [英语考试]同等学力英语新大纲全部词汇
- 2022年肝动脉化疗栓塞术(TACE)
- 形式发票格式2 INVOICE
- 年产5万吨丁苯橡胶生产工艺设计
- 平面图形的密铺
- 医师定期考核表(简易程序) 排版规范版本
- 移动公司委托书
评论
0/150
提交评论