首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
考研
假设有一个进程拥有两个线程(编号为0和1)需要去访问同一个共享资源,为了避免竞争状态的问题,必须实现一种互斥机制,使得在任何时候只能有一个线程在访问这个资源。 假设有如下的一段代码: int flag L22; /*flag数组,初始化为FALSE*/
假设有一个进程拥有两个线程(编号为0和1)需要去访问同一个共享资源,为了避免竞争状态的问题,必须实现一种互斥机制,使得在任何时候只能有一个线程在访问这个资源。 假设有如下的一段代码: int flag L22; /*flag数组,初始化为FALSE*/
admin
2017-04-28
90
问题
假设有一个进程拥有两个线程(编号为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);
……做其他的事情……
试问:
以上的这种机制能够实现资源互斥访问吗?为什么?
选项
答案
这种机制不能实现资源的互斥访问。 考虑如下的情形: 1)初始化的时候,flag数组的两个元素值均为FALSE。 2)线程0先执行,在执行while循环语句的时候,由于flag[1]=FALSE,所以顺利结束,不会被卡住。假设这个时候来了一个时钟中断,则打断它的运行。 3)线程1去执行,在执行while循环语句的时候,由于flag[0]=FALSE,所以顺利结束,不会被卡住,然后就进入了临界区。 4)后来当线程0再执行的时候,也进入了临界区,这样就同时有两个线程在临界区。 不能成功的根本原因是无法保证Enter_Critical_Section()函数执行的原子性,从上面的软件实现方法中可以看出,对于两个进程间的互斥,最主要的问题就是标志的检查和修改不能作为一个整体来执行,因此容易导致无法保证互斥访问。
解析
转载请注明原文地址:https://kaotiyun.com/show/TPRi777K
本试题收录于:
计算机408题库学硕统考专业分类
0
计算机408
学硕统考专业
相关试题推荐
分析德国法西斯上台的原因。
在印度独立和巴勒斯坦建国问题上,英国扮演了什么角色?有什么影响?
《关于建国以来党的若干历史问题的决议》
【《关于正确处理人民内部矛盾的问题》】
毛泽东认为,社会主义这个阶段可分为两个阶段,包括()。
新石器时代的房屋建筑根据环境的不同形成了不同的类型,()地区多为干栏式建筑。
在击溃国民党的全面进攻和重点进攻中,人民解放军的主要作战目标是()。
第三次科技革命对社会经济结构的影响是()。
随机试题
Theymustworkveryhardinorderto________theirchildren.
以下票据抗辩中,可以对抗任何持票人的是()
GATT与GATS的一般原则有哪些不同?
寡头垄断厂商的产品是()
正常人每日的尿蛋白总量是
为比较两所等级和规模均相同的医院的治愈率,若各医院各科病人数的内部构成不同时,为避免产生假象,关键要进行的是
肺心病与慢性支气管炎、肺气肿的临床征象有很多相似点,但不同点是肺心病有
对水平混凝土构件模板支撑系统高度超过(),或跨度超过18m的高大模板工程,建筑施工企业应当组织专家组进行论证审查。
窗体上画一个命令按钮,然后编写如下代码:PrivateTypeRecordIDAsIntegerNameAsString*20EndTypePrivateSubcommand1_Click(Open"c:
DuringtheSeptember11thterroristattacks,______.Accordingtothepassage,whichofthefollowingisTRUE?
最新回复
(
0
)