




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、读者写者问题线程机制和信号量实现读者写者(Reader-Writer)问题并发控制。,张国栋董乐乐马瑞潘术森陈世飞熊志标,问题分析,读者写者问题(1)保证一个writer进程必须与其他进程互斥地访问共享对象的同步问题。包括1、写者和写者2、读者和写者(2)有一群写者和一群读者,写者在写同一本书,读者也在读这本书,多个读者可以同时读这本书,但是,只能有一个写者在写书。(3)读者必写者优先,也就是说,读者和写者同时提出请求时,读者优先。当读者提出请求时需要有一个互斥操作,另外,需要有一个信号量S来当前是否可操作。,BOOK,读者,写者,基本要求:读读允许;读写互斥;写写互斥(1)任意多的读进程可以
2、同时读这个文件;(2)一次只允许一个写进程往文件中写;(3)如果一个写进程正在往文件中写,禁止任何读进程或写进程访问文件;(4)写进程执行写操作前,应让已有的写者或读者全部退出。这说明当有读者在读文件时不允许写者写文件。,解决办法:(1)除了上述四个规则外,还增加读者优先的规定,当有读者在读文件时,对随后到达的读者和写者,要首先满足读者,阻塞写者。这说明只要有一个读者活跃,那么随后而来的读者都将被允许访问文件,从而导致写者长时间等待,甚至有可能出现写者被饿死的情况。如果读者来:无读者、写者,新读者可以读有写者等待,但有其他读者正在读,新读者可以读有写者写,新读者等如果写者来:无读者,新写者可以
3、写有读者,新写者等待有其他写者,新写者等待,最多允许RN个读者同时读。为此,又引入了一个信号量L,并赋予初值为RN,通过执行wait(L,1,1)操作,来控制读者的数目,每当有一个读者进入时,就要执行wait(L,1,1)操作,使L的值减1。当有RN个读者进入读后,L便减为0,第RN+1个读者要进入读时,必然会因wait(L,1,1)操作失败而堵塞。,如果没有写者正在操作,则读者不需要等待,用一个整型变量readcount记录当前的读者数目,用于确定是否释放写者线程,(当readcout=0时,说明所有的读者都已经读完,释放一个写者线程),每个读者开始读之前都要修改readcount,为了互斥
4、的实现对readcount的修改,需要一个互斥对象Mutex来实现互斥。另外,为了实现写-写互斥,需要一个临界区对象write,当写者发出写的请求时,必须先得到临界区对象的所有权。通过这种方法,可以实现读写互斥,当readcount=1时,(即第一个读者的到来时,),读者线程也必须申请临界区对象的所有权。当读者拥有临界区的所有权,写者都阻塞在临界区对象write上。当写者拥有临界区对象所有权时,第一个判断完readcount=1后,其余的读者由于等待对readcount的判断,阻塞在Mutex上!,临界资源,Reader,Writer,readcount,Mutex,临界区write,当新的读
5、者到来的时候,若当前正有读者在进行读操作,则该读者无需等待前面的写操作完成,直接进行读操作。设置两个互斥信号量:rwmutex用于写者与其他读者/写者互斥的访问共享数据rmutex用于读者互斥的访问读者计数器readcountvarrwmutex,rmutex:semaphore:=1,1;intreadcount=0;cobeginreaderibegin/i=1,2,.P(rmutex);Readcount+;If(readcount=1)P(rwmutex);V(rmutex);读数据;P(rmutex);Readcount-;If(readcount=0)V(rwmutex);V(rm
6、utex);EndWriterjbegin/j=1,2,.P(rwmutex);写更新;V(rwmutex);EndCoend,写者优先与读者优先相类似。不同之处在于一旦一个写者到来,它应该尽快对文件进行写操作,如果有一个写者在等待,则新到来的读者不允许进行读操作。为此应当填加一个整形变量Write_count,用于记录正在等待的写者的数目,当Write_count=0时,才可以释放等待的读者线程队列。为了对全局变量Write_count实现互斥,必须增加一个互斥对象mutex。为了实现写者优先,应当填加一个临界区对象read,当有写者在写文件或等待时,读者必须阻塞在read上。读者线程除了要
7、对全局变量Read_count实现操作上的互斥外,还必须有一个互斥对象对阻塞read这一过程实现互斥。这两个互斥对象分别命名为mutex1,mutex2,写者优先:1)多个读者可以同时进行读2)写者必须互斥(只允许一个写者写,也不能读者写者同时进行)3)写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)设置三个互斥信号量:rwmutex用于写者与其他读者/写者互斥的访问共享数据rmutex用于读者互斥的访问读者计数器readcountnrmutex用于写者等待已进入读者退出,所有读者退出前互斥写操作varrwmutex,rmutex,nrmutex:semaphore:=1,1,1;intreadcount=0;cobeginreaderbegin/i=1,2,.P(rwmutex);P(rmutex);Readcount+;If(readcount=1)P(nrmutex);/有读者进入,互斥写操作V(rmutex);V(rwmutex);/及时释放读写互斥信号量,允许其它读、写进程申请资源读数据;,P(rmutex);Readcount-;If(readcount=0)V(nrmutex);/所有读者退出,允许写更新V(rmutex);Endcowriterwriterbegin/i=1,2,.P(nrmutex);write-count+;V(nrmute
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房屋租赁合同和房屋买卖合同
- 人工养猪场租赁合同书
- 停车车库买卖合同
- 剧组管理人员劳动合同
- 租赁农村房屋租赁合同标准(2025年版)
- 道路土方测绘合同范本
- 英文资产评估合同范本
- (14)-专题14 口语交际
- 工人干活协议合同范本
- 油漆材料供货合同范本
- 2024年4月自考《市场营销学试题》真题完整试卷
- 中国近现代史纲要-第七章
- 2024年湖北省中考地理·生物试卷(含答案解析)
- DL-T+5759-2017配电系统电气装置安装工程施工及验收规范
- 2024年共青团入团积极分子考试题库及答案
- 2024年《动漫艺术概论》自考复习题库(附答案)
- 2024年职业技能“大数据考试”专业技术人员继续教育考试题库与答案
- 中医类新技术新项目
- 国家高新技术企业评定打分表
- 台球俱乐部股份转让协议
- 一例精神分裂症患者的护理查房
评论
0/150
提交评论