我寫了一個非常簡單的代碼來重現我的問題。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