首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
考研
实现一个经典的“读者一写者”算法时,若当前临界区中有读者访问,写者再来时必须在临界区外面等候,如果其后读者源源不断地到达,按策略他们均可以进入临界区,始终保持临界区中有读者访问,那么写者可能长时间不能进入临界区而形成饥饿。为解决此类问题,我们修改访问策略,
实现一个经典的“读者一写者”算法时,若当前临界区中有读者访问,写者再来时必须在临界区外面等候,如果其后读者源源不断地到达,按策略他们均可以进入临界区,始终保持临界区中有读者访问,那么写者可能长时间不能进入临界区而形成饥饿。为解决此类问题,我们修改访问策略,
admin
2013-12-31
49
问题
实现一个经典的“读者一写者”算法时,若当前临界区中有读者访问,写者再来时必须在临界区外面等候,如果其后读者源源不断地到达,按策略他们均可以进入临界区,始终保持临界区中有读者访问,那么写者可能长时间不能进入临界区而形成饥饿。为解决此类问题,我们修改访问策略,要求当写者到达时,写者具有优先权。具体说,写者到达后,已经在临界区内的读者继续读取直到结束,而后来的读者就不能进入临界区。等所有的读者离开临界区以后让写者先进去访问,然后等写者离开后再允许读者进人临界区。这所谓“写者优先读者一写者”问题。请用信号量和PV操作来描述这一组进程的工作过程。
选项
答案
第一部分:假设临界区能容纳的最大读者数量为n。则: typedef int semaphore; //定义信号量 semaphore mutex=1; //读写的互斥量 semaphore readers=n; //读者的资源量 void Readers(void) //读者进程 { while(TRUE) //调度 { P(mutex); //读写互斥 P(readers); //读者资源量减一,为负时等待 V(mutex); //释放读写互斥 read_data(void); //读者读取数据 V(readers); //离开时释放读者数量,加一 } } Void writers(void) //写者进程 { while(TRUE) { P(mutex); //获取读写互斥量 for(int i=1;i<=n;i++)P(readers); //将许可读者进入的资源量消耗光 write_data(void); //写入数据 for(int i:1;i<=n;i++)V(readers); //释放读者的资源量 V(mutex);) //释放读写互斥量 } 第二部分:若对读者的数量不加以限制,那么应该如下书写程序。 typedef int semaphore; //定义信号量 semaphore rwmutex=1; //读写的互斥量 semaphore rcmutex=1; //访问读者计数器的互斥量 semaphore nrmutex=1; //写者等待读者退出的互斥量 int readerscount=0; //读者计数器 void Readers(void) //读者进程 { while(TRUE) //调度 { P(rwmutex); //读写互斥 P(rcmutex); //进入修改读者计数器互斥 readerscount++; //读者数量加一 if(readerscount==1)P(nrmutex); //若是第一个读者,互斥写者 V(rcmutex); //释放读者计数器互斥量 V(rwmutex); //及时释放读写互斥量,允许其他进程申请 read_data(void); //读者读取数据 P(rcmutex); //离开临界区时读者计数器互斥 readerscount--; //读者数量减一 if(readerscount==0)V(nrmutex); //所有读者退出临界区 V(rcmutex); //离开时释放读者计数器互斥量 } } Void wr北ers(void) //写者进程 { while(TRUE) { P(rwmutex); //获取读写互斥量 P(nrmutex); //若临界区有读者,等待其退出 write_data(void); //写入数据 V(nrmutex); //允许后续第一个读者进入临界区 V(rwmutex); //允许新的读者和写者排队 } } 上述程序不能保证在等待队列中写者更优一点,因为上述约束条件只能将读者无限制地进入临界区的情况给屏蔽了,而在临界区外,读者和写者还是按照先来先服务的方式排队。 第三部分给出的方法使得访问队列中只要有写者出现,它必然优先进入临界区。 typedef int semaphore; //定义信号量 semaphore rwmutex=1; //读写的互斥量 semaphore rcmutex=1; //访问读者计数器的互斥量 semaphore wcmutex=1; //访问排队写者计数器的互斥量 semaphore nrmutex=1; //写者等待读者退出的互斥量 int readerscount=0; //读者计数器 int writerscount=0; //写者计数器 void Readers(void) //读者进程 { while(TRUE) //调度 { P(rwmutex); //读写互斥 P(rcmutex); //进入修改读者计数器互斥 readerscount++; //读者数量加一 if(readerscount==1)P(nrmutex); //若是第一个读者,互斥写者 V(rcmutex); //释放读者计数器互斥量 V(rwmutex); //及时释放读写互斥量,允许其他进程申请 read_data(void); //读者读取数据 P(rcmutex); //离开临界区时读者计数器互斥 readerscount--; //读者数量减一 if(readerscount==0)V(nrmutex); //所有读者退出临界区 V(rcmutex); //离开时释放读者计数器互斥量 } } Void writers(void) //写者进程 { while(TRUE){ P(wcmutex); //获取写者队列互斥量 writerscount++; //写者队列加一 if(writerscount==1)P(rwmutex); //第一写者使用读写互斥量 V(wcmutex); //释放写者计数互斥量 P(nrmutex); //若临界区有读者,等待其退出 write_data(void); //写入数据 V(nrmutex); //释放后续第一个读者 P(wcmutex); //获取写者队列互斥量 writerscount--; //写者队列减一 if(writerscount==0)V(rwmutex); //最后一个写者退出,释放临界区 V(wcmutex); //释放写者计数互斥量 } } 每个读者进程最开始都要申请一下rwmutex信号量,之后在真正做读操作前即让出(使得写进程可以随时申请到rwmutex)。而只有第一个写进程需要申请nrmutex,之后就一直占着不放了,直到所有写进程都完成后才让出。等于只要有写进程提出申请就禁止读进程排队,从而提高了写进程的优先级。
解析
转载请注明原文地址:https://kaotiyun.com/show/Xvxi777K
本试题收录于:
计算机408题库学硕统考专业分类
0
计算机408
学硕统考专业
相关试题推荐
评述欧洲一体化的历史进程。(华东师范大学1998年世界当代史真题)
彻底肃清氏族制残余,标志雅典国家的正式形成的事件是()。
我国第一部系统的史学理论著作是()。
1993年,中共十四届三中全会上通过了《中共中央关于解决社会主义市场经济体制若干问题的决定》,其内容不包括()
下列历史事件发生的先后顺序是()①“铁幕”演说②马歇尔计划③北大西洋公约
帝国前期罗马文化吸收了许多民族的文化成果,进入了兴盛时代。其中自然科学方面最有代表性的人物是()。
关于大陆人民大规模达到台湾的第一次明确的记录出现在()。
阅读材料,回答以下问题:重庆中央党部,暨中央执监委员诸同志均鉴:今年4月,临时全国代表大会宣言,说明此次抗战之原因,曰:“自塘沽协定以来,吾人所以忍辱负重与倭国周旋,无非欲停止军事行动,采用和平方法,先谋北方各省之保全,再进而谋东北四省问题之合理解决,
下列描述中,属于冯.诺依曼体系结构的特点是()。①采用流水线技术;②指令和数据均以二进制表示;③存储程序并且存储时不区别数据和指令。
随机试题
新闻单位广告部门工作人员的工资属于广告成本中的【】
《马伶传》中“以分宜教分宜”的意思是()
男性,65岁,胃溃疡病史20年,常于餐后出现中上腹疼痛,服氢氧化铝可缓解。近一年来疼痛不似从前有规律,且服氢氧化铝也难以缓解,伴消瘦,来诊。查:大便隐血试验阳性,应采取的最好治疗方法为
由于许多城市基础设施的特性,城市基础设施服务在世界各国都普遍受到()的干预和直接控制。
上海证券交易所基金最低申购金额及赎回份额由基金管理人确定并公告。在最低申购金额的基础上,累加申购金额为1000元或其整数倍,但最高不能超过99999900元。()
A注册会计师负责审计甲公司2011年度财务报表。在考虑获取管理层书面声明时,A注册会计师遇到下列事项,请代为作l出正确的专业判断。A注册会计师可以接受为甲公司管理层书面声明的文件包括()。
Y公司为主要从事各种农业化肥生产和销售的上市实体。Y公司日常交易采用自动化信息系统(以下简称系统)和手工控制相结合的方式。W注册会计师负责审计Y公司2017年度财务报表。资料一:注册会计师在审计工作底稿中记录了所了解的Y公司的情况及其环境,部分
领导安排你和一个工作中关系不好、不如你的同事一起完成一项任务,你会怎么做?
像印钞机一样斩获暴利,收费公路乱象并非始自今日,但在经济不振、公民权利意识高涨之当下,其推高物流乃至民众生活成本的“罪状”便格外让人难以忍受。虽然过去人们一度悲观地认为,撼动收费公路暴利并不比撼山更容易,可从去年央视和全国各大媒体密集报道全国路桥乱收费的行
阅读以下说明和VisualBasic代码,将应填入(n)处的字句写在对应栏内。【说明】以下代码实现了当用户退出界面时,判断TextEdit中的文字是否发生改变,弹出对话框判断,让用户选择是否保存文件或取消退出界面操作。阅读下面的代码,将其补充完
最新回复
(
0
)