我写了一个非常简单的代码来重现我的问题。C++变量不会改变,直到线程完成
#include <iostream>
#include "tools.h" //contains s_sleep()
#include <thread>
using namespace std;
void change(int *i)
{
while (true)
{
*i = 4356;
}
}
int main()
{
int v=3;
cout << v <<endl;
thread t(change, &v);
s_sleep(1); //sleep one second
cout << v << endl;
t.join();
}
输出为3,再次为3后。但是,当我改变一个行
//while (true)
我收到3,一秒钟后4356.
怎么可能? 希望有人能帮助。
请阅读有关数据竞赛的内容。你的程序因为它而产生未定义的行为。 – nwp