0
我最近在测试中遇到了一个问题,基本上说这是为了让3个并发进程按顺序执行一些代码块。竞赛状况在哪里?
执行顺序柜面说没有道理的例子:
P1 P2 P3 P1 P2 P3 ...
我的回答,我写这个伪ISH代码
shared s[2] = {-1,-1};
void Process1(){
while(1){
if(s[0] < 0 && s[1] < 0){
DO_CS;
s[0] = 1;
}
}
}
void Process2(){
while(1){
if(s[0] > 0 && s[1] < 0){
DO_CS;
s[1] = 1;
}
}
}
void Process3(){
int i = 0;
while(1){
if(s[1] > 0 && s[0] > 0){
DO_CS;
s[0] = -1;
s[1] = -1;
}
}
}
我的老师w死记硬背的竞争条件,并在Process3的if语句中圈出最后一行,并在process2中绘制了条件语句的箭头。
我很难看到这可能会导致竞争条件。我相信这很明显,但我无法看到它。
谢谢!
你现在明白了吗? – Amit
是的,你的答案是有道理的。我忘记了,如果陈述不是一次全部评估。非常感谢您,我会将您的答案标记为已接受。 @Amit – Danwakeem