首页 > 解决方案 > threading,if-else语句,上下文切换后都错了,会发生什么

问题描述

例子

int a = 8;
if(a < 9){
 something1();
}
else{
 something2();
}

如果在 if 语句之前(在 a 的 init 之后)有一个上下文切换会发生什么,这会将 a 更改为 a=11,然后返回到上面的代码,在到达 else 之前,另一个上下文切换将会改变a 到 a= 8,再次返回上面的代码。它还会在 else 语句中吗?

谢谢

标签: c++

解决方案


if 语句通常通过汇编代码中的条件跳转来实现。但他们不必如此。例如,以这段代码为例:

int main(int argc, char** argv) {
    if (argc > 42)
        return 62;
    else
        return 31;
}

其中 clang 编译为(优化):

main: # @main
  cmp edi, 42
  mov ecx, 62
  mov eax, 31
  cmovg eax, ecx
  ret

无论如何,您通常会在某处进行一次比较,即变量只检查一次。在这种情况下,在cmp edi, 42语句中检查变量。

一般来说,行为是未定义的。


推荐阅读