首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
考研
假设有一个进程拥有两个线程(编号为0和1)需要去访问同一个共享资源,为了避免竞争状态的问题,必须实现一种互斥机制,使得在任何时候只能有一个线程在访问这个资源。 假设有如下的一段代码: int flag L22; /*flag数组,初始化为FALSE*/
假设有一个进程拥有两个线程(编号为0和1)需要去访问同一个共享资源,为了避免竞争状态的问题,必须实现一种互斥机制,使得在任何时候只能有一个线程在访问这个资源。 假设有如下的一段代码: int flag L22; /*flag数组,初始化为FALSE*/
admin
2017-04-28
58
问题
假设有一个进程拥有两个线程(编号为0和1)需要去访问同一个共享资源,为了避免竞争状态的问题,必须实现一种互斥机制,使得在任何时候只能有一个线程在访问这个资源。
假设有如下的一段代码:
int flag L22; /*flag数组,初始化为FALSE*/
Enter_Critical_Section (int my_thread_id) rint other thread_id)
{
while (flag[other thread_idl==TRUE); /*空循环语句*/
flag Emy_thread_id]=TRUE:
}
Exit_Critical_Section (int my_thread_id) tint other_thread_id)
{
flag[my_thread id] =FALSE;
}
当一个线程想要访问临界资源时,就调用上述的这两个函数。比如,线程O的代码可能是
这样的:
FJnter_Cri tical_Sect.ion(0,1);
……使用这个资源……
Exit_Critical_Section (0,1);
……做其他的事情……
试问:
如果把Enter_Critical_Section()函数中的两条语句互换一下位置,结果会如何?
选项
答案
可能会出现死锁。 考虑如下的情形: 1)初始化的时候,flag数组的两个元素值均为FALSE。 2)线程0先执行,flag[0]=TRUE,假设这个时候来了一个时钟中断,则打断它的运行。 3)线程1去执行,flag[1]=TRUE,在执行while循环语句的时候,由于flag[0]=TRUE,所以在这个地方被卡住了,直到时间片用完。 4)线程0再执行的时候,由于flag[1]=TRUE,它也在while循环语句的地方被卡住了,这样,这两个线程都无法执行下去,从而死锁。 本题出现死锁的原因是两个线程都可以直接进入Enter_Critical_Section()函数,并立即对flag[]进行修改,使flagLul和flag[1]的值都为TRUE;又因为无法保证Enter_Critical_Section()函数执行的原子性,导致了两个进程在停止while()语句的条件判断上,发生死锁。
解析
转载请注明原文地址:https://kaotiyun.com/show/UPRi777K
本试题收录于:
计算机408题库学硕统考专业分类
0
计算机408
学硕统考专业
相关试题推荐
试述欧美盟国对德、日法西斯处置的异同,并分析这种现象的原因及影响。
简述美苏争霸的三个阶段,并分析其影响与教训。
以下内容不属于中国共产党为解决中西部落后问题,巩固发展国防事业而采取的三线建设的是()。
在巴黎和会上获利最大的两个国家是()。
“瓜步之战”发生在下列哪两个政权之间?()
新石器时代的房屋建筑根据环境的不同形成了不同的类型,()地区多为干栏式建筑。
中古时代实行索贡巡行赋税征收方式的国家是()。
明朝中叶,美洲高产的农作物()的传入,对改变当时人们的食品结构产生了重大影响。
某计算机字长为16位,主存地址空间大小为128KB,按字编址。采用单字长指令格式,指令各字段定义如图B-4所示。转移指令采用相对寻址方式,相对偏移量用补码表示,寻址方式定义见表B-1。请回答下列问题:该指令系统最多可有多少条指令?该计算机最多有
随机试题
分泌HCO3-的是
结核性脑膜炎最常见为
膀胱肿瘤最常见的临床表现是
下列哪些属于宪法的修改程序?
施工企业项目经理是()。
下列关于资本作用的说法,正确的有()。
辛亥革命后屡遭挫折的孙中山先生,把中国共产党人当成亲密朋友,毅然改组国民党,实行()三大政策。
InthefirstyearorsoofWebbusiness,mostoftheactionhasrevolvedaroundeffortstotaptheconsumermarket.Morerecentl
下列给定程序中,函数fun的功能是:把形参a所指数组中的最大值放在a[0]中,接着求出a所指数组中的最小值放在a[1]中,再把a所指数组元素中的次大值放在a[2]中,把a数组元素中的次小值放在a[3]中,依此类推。例如,若a所指数组中的数据最初排
Must-seeWebsitesTheInternethasbillionsofwebsites.Youcouldspendyourwholelifesurfingthewebandnevervisitthe
最新回复
(
0
)