读者写者问题_写者优先参考答案
更新时间:2024-06-03 00:31:01 阅读量: 综合文库 文档下载
- 读者写者问题写者优先推荐度:
- 相关推荐
【写者优先】在读者、写者问题中,如果总有读者进程进行读操作,会造成写者进程永
远都不能进行写操作(读者优先),即所谓的写者饿死现象。给出读者、写者问题的另一个解决方案:即保证当有一个写者进程想写时,不允许读者进程再进入,直到写者写完为止,即写者优先。
让我们先回顾读者写者问题[1]:
一个数据对象若被多个并发进程所共享,且其中一些进程只要求读该数据对象的内容,
而另一些进程则要求写操作,对此,我们把只想读的进程称为“读者”,而把要求写的进程称为“写者”。在读者、写者问题中,任何时刻要求“写者”最多只允许有一个执行,而“读者”则允许有多个同时执行。因为多个“读者”的行为互不干扰,他们只是读数据,而不会改变数据对象的内容,而“写者”则不同,他们要改变数据对象的内容,如果他们同时操作,则数据对象的内容将会变得不可知。所以对共享资源的读写操作的限制条件是:
? 允许任意多的读进程同时读; ? 一次只允许一个写进程进行写操作;
? 如果有一个写进程正在进行写操作,禁止任何读进程进行读操作。
为了解决该问题,我们只需解决“写者与写者”和“写者与第一个读者”的互斥问题即
可,为此我们引入一个互斥信号量Wmutex,为了记录谁是第一个读者,我们用一个共享整 型变量Rcount 作一个计数器。而在解决问题的过程中,由于我们使用了共享变量Rcount, 该变量又是一个临界资源,对于它的访问仍需要互斥进行,所以需要一个互斥信号量Rmutex, 算法如下:
semaphore Wmutex, Rmutex = 1; int Rcount = 0; void reader() /*读者进程*/ { while (true) { P(Rmutex); if (Rcount == 0) P(wmutex); Rcount = Rcount + 1; V(Rmutex); ??; read; /* 执行读操作 */ ??; P(Rmutex); Rcount = Rcount - 1; if (Rcount == 0) V(wmutex); V(Rmutex); } } void writer() /*写者进程*/ { while (true) { P(Wmutex); ??; }
现在回到【写者优先】优先问题
【写者优先】在读者、写者问题中,如果总有读者进程进行读操作,会造成写者进程永
} write; /* 执行写操作 */ ??; P(Wmutex); 远都不能进行写操作(读者优先),即所谓的写者饿死现象。给出读者、写者问题的另一个解决方案:即保证当有一个写者进程想写时,不允许读者进程再进入,直到写者写完为止,即写者优先。
【解题思路】在上面的读者写者问题基础上,做以下修改:
? 增加授权标志authFlag,当写者到来,发现有读者在读,则取消授权,然后等待缓
冲区;
? 增加“等待授权计数器waitAuthCount”,写者离开时,如果waitAuthCount大于0,
则迭代唤醒等待授权的读者;
? 读者到来,首先看授权标志,如果有授权标志,则继续,否则等待授权,即写者取
消授权后,新来的读者不能申请缓冲区。
? 增加Amutex互斥信号量,保护waitAuthCount、authFlag ? 增加同步信号量mutexAuth,表示等待授权的读者队列
【伪代码如下】
semaphore Wmutex=1, Rmutex=1 ,Amutex=1, mutexAuth=0; int Rcount = 0; int waitAuthCount=0; int authFlag=1; void reader() /*读者进程*/ { P(Amutex)//临界资源authFlag和waitAuthCount互斥 if (authFlag==0) { waitAuthCount++; p(mutexAuth); } V(Amutex) P(Rmutex);//临界资源Rcount互斥 if (Rcount == 0) P(wmutex);//缓冲区互斥 Rcount = Rcount + 1; V(Rmutex); ......; read; /* 执行读操作 */ ......; P(Rmutex); Rcount = Rcount - 1; if (Rcount == 0) V(wmutex); V(Rmutex); } } void writer() /*写者进程*/ { if(Rcount>0) authFlag=0; P(Wmutex); ......; } write; /* 执行写操作 */ ......; P(Wmutex); P(Amutex) while(waitAuthCount>0){ v(mutexAuth); waitAuthCount--; } V(Amutex)
【vc++代码】 // testsemaphore.cpp : Defines the entry point for the console application. // by 西南大学计算机科学系周竹荣 // #include \ #include \ #include \ #include 【运行结果】 参考文献 [1]计算机操作系统-郁红英-冯庚豹-人民邮电出版社
正在阅读:
读者写者问题_写者优先参考答案06-03
语文文言文《朝三暮四》02-20
成语汇集大全03-12
经典有机人名反应01-17
任务驱动教学法和项目教学法在高职《汽车发动机构造与维修》课程上的应用研究12-15
打乒乓球怎么样破旋转球03-15
凉山州学术和技术带头人10-15
在人才工作会议上的讲话稿04-29
微笑的力量作文500字02-05
也说“人人都希望被肯定”09-18
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 优先
- 读者
- 答案
- 参考
- 问题
- 计划书
- ProE config.pro 配置参数大全
- 2016-2021年中国冰箱压缩机行业市场预测与投资规划分析报告-行业
- 客观性试题
- 农村基层干部队伍建设问题调研报告
- 捕食性螨类
- 十佳书香寝室 - 图文
- 中医内科心系病证复习资料
- 文体广电局加快公共文化发展计划(参考)
- 课时跟踪检测(一) 沁园春 长沙
- 初一上学期生物月考题
- CCNP路由精华
- VHDL语言 四选一数据选择器 多种描述
- 广东省幼儿园教育指南(试行)
- 骨干教师、学科带头人评审表
- 六安市万佛路施工组织设计
- 链式货运索道有限元分析 - 图文
- 2011-2012胜利一中高二数学第一学期期中试题
- 复用诊疗器械(器具)和物品手工清洗标准操作规程
- 赵宇-海文教育2013考研政治暑期强化班马原讲义补充资料-7-2