【发布时间】:2016-06-01 12:32:07
【问题描述】:
朋友之间的赌注。 sum 变量被定义为全局变量。 我们有 2 个线程在循环 1..100 上运行,并且每个循环将 sum 加 1。
将打印什么? “总和=”?
int sum = 0;
void func(){
for (int i=0 ; i<= 100; i++){
sum++;
}
}
int main(){
t1 = Thread(func);
t2 = Thread(func);
t1.start();
t2.start();
t1.join();
t2.join();
cout << "sum = " << sum;
return 0;
}
【问题讨论】:
-
任何事情都可能发生。它是 UB - http://stackoverflow.com/questions/37325524/does-integer-overflow-cause-undefined-behavior-because-of-memory-corruption/37325854#37325854
-
出于好奇,我更正了 c++11 的程序,第一个结果是“202”,这意味着任何认为范围是 100-200 的人都是错误的。出于一个可能的原因,请仔细查看代码;)但它仍然是 UB。
-
注意标题是指prefix operator++,但代码使用postfix。并不是说这会影响结果...
标签: c++ multithreading operators