首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >互斥案例中的未清关

互斥案例中的未清关
EN

Stack Overflow用户
提问于 2017-04-09 16:38:05
回答 1查看 569关注 0票数 0

我读过几个关于相互排斥的例子,除了下面给我的例子之外,我可以理解其中大多数例子的运行情况:

代码语言:javascript
运行
复制
boolean[] flag = new boolean[2]; 

一个时间-条件取决于另一个进程的标记状态。因此,例如,为了让P1进入它的关键部分,flag[0]flag[1]都需要设置为true

根据我的间歇,整个运行必须如下所示:

代码语言:javascript
运行
复制
P1 - > flag[1] = true
while(flag[0])            // flag[0] is still state-undeclared
P2  -> flag[0]  = true    // so P0 must set it true(?)
critic1(); 
while(flag[1]) 
critic2(); 

虽然这是不正确的,因为当flag[0]flag[1]设置为true时,这两个进程都会传递while(flag[n])条件,并且仍然会出现争用条件。我误会什么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-26 09:30:10

声明和定义

代码语言:javascript
运行
复制
boolean[] flag = new boolean[2]; 

看起来像java,在java中,布尔数组中填充了false作为默认值。

因此,例如,为了让P1进入它的关键部分,需要将标志和flag1设置为true。

不,这不是,对于要进入Critical SectionP1,唯一的问题是,在P1输入Critical Section之前,不能执行P0的以下语句。

代码语言:javascript
运行
复制
flag[0] = true;

由于默认情况下是flag[0] = false,循环条件while(flag[0])将为false,而P1将进入关键部分。

如果进程P0P1的调度方式是在相应的下一个语句之前为两个进程执行以下语句

代码语言:javascript
运行
复制
flag[0] = true; and flag[1] = true;

在这种情况下,将出现死锁。。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43309215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档