c++ - threading,if-else语句,上下文切换后都错了,会发生什么
问题描述
例子
int a = 8;
if(a < 9){
something1();
}
else{
something2();
}
如果在 if 语句之前(在 a 的 init 之后)有一个上下文切换会发生什么,这会将 a 更改为 a=11,然后返回到上面的代码,在到达 else 之前,另一个上下文切换将会改变a 到 a= 8,再次返回上面的代码。它还会在 else 语句中吗?
谢谢
解决方案
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
语句中检查变量。
一般来说,行为是未定义的。