操作系统实验 读者写者问题.doc

操作系统实验 读者写者问题.doc

ID:58516115

大小:150.50 KB

页数:7页

时间:2020-09-03

操作系统实验 读者写者问题.doc_第1页
操作系统实验 读者写者问题.doc_第2页
操作系统实验 读者写者问题.doc_第3页
操作系统实验 读者写者问题.doc_第4页
操作系统实验 读者写者问题.doc_第5页
资源描述:

《操作系统实验 读者写者问题.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、《计算机操作系统》实验报告题目读者写者问题学院(部)信息学院专业计算机科学与技术班级学生姓名学号指导教师(签字)一、问题描述一个数据文件或者记录,可以被多个进程共享,我们把只要求读该文件的进程称为“Reader进程”,其他进程则称为“Writer进程”。允许多个进程同时读一个共享对象,因为读操作不会是数据文件混乱。但不允许一个Writer进程和其他Reader进程或者Writer进程同时访问共享对象,因为这种访问将会引起混乱。所谓“读者——写着问题(Reader—WriterProblem)”是指保证一个Writer进程必须与其他进程互斥地访问共享对象的同步

2、问题二、解决问题为实现Reader与Writer进程间在读或写是的互斥而设置了一个互斥的信号量Wmutex。另外,在设置一个整型变量Readcount表示正在读的进程数目。由于只要有一个Reader进程在读,便不允许Writer去写。因此,仅当Readercount=0时,表示尚无Reader进程在读时,Reader进程才需要进行Wait(wmutex)操作。若Wait(Wmutex)操作成功,Reader进程便可去读,相应地,做Readcount+1操作。同理,仅当Reader进程在执行了Readercount-1操作后其值为0时,才执行Signal(Wm

3、utex)操作,以便让Writer进程写。又因为Readercount是一个可被多个Reader进程访问的临界资源,因此也应该为它设置一个互斥信号量rmutex。三、代码实现1、读者优先#include#includeusingnamespacestd;CRITICAL_SECTIONrmutex,wmutex;intwr;intreadernum;DWORDWINAPIreader(LPVOIDIpParamter){cout<<"读者申请";wr++;EnterCriticalSection(&rmutex)

4、;if(readernum==0)EnterCriticalSection(&wmutex);readernum++;cout<<"读者进入成功正在读取";LeaveCriticalSection(&rmutex);Sleep(2000);EnterCriticalSection(&rmutex);readernum--;cout<<"读者退出";wr--;if(readernum==0)LeaveCriticalSection(&wmutex);LeaveCriticalSection(&rmutex);return0;}DWORDWINAPIwr

5、iter(LPVOIDPM){cout<<"写者申请";while(wr!=0){}EnterCriticalSection(&wmutex);cout<<"写者已进入正在写入";Sleep(500);cout<<"写者退出";LeaveCriticalSection(&wmutex);return0;}intmain(){readernum=0;wr=0;InitializeCriticalSection(&rmutex);InitializeCriticalSection(&wmutex);HANDLEhr[5];//定义读者线程HANDLE

6、hw[5];//定义写者线程//intthnum;intdrn=0;//输入的读者个数intdwn=0;//输入的写者个数cout<<"输入读者写者线程1代表读者2代表写者0代表结束"<>th[num];while(th[num]){if(th[num]==1){drn++;}if(th[num]==2){dwn++;}num++;cin>>th[num];}inthr1=0,hw1=0;for(intj=0;j!=num;j++){if(th[j]==1){hr[hr1]=CreateThread(

7、NULL,0,reader,NULL,0,NULL);hr1++;}if(th[j]==2){hw[hw1]=CreateThread(NULL,0,writer,NULL,0,NULL);hw1++;}}WaitForMultipleObjects(drn,hr,TRUE,INFINITE);WaitForMultipleObjects(dwn,hw,TRUE,INFINITE);for(inti=0;i!=drn;i++){CloseHandle(hr[i]);}for(inti=0;i!=dwn;i++){CloseHandle(hw[i]);}Del

8、eteCriticalSection(&rmutex

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。