これは例です:
#include<iostream>
#include<thread>
using namespace std;
void f1(double& ret) {
ret=5.;
}
void f2(double* ret) {
*ret=5.;
}
int main() {
double ret=0.;
thread t1(f1, ret);
t1.join();
cout << "ret=" << ret << endl;
thread t2(f2, &ret);
t2.join();
cout << "ret=" << ret << endl;
}
出力は次のとおりです。
ret=0
ret=5
-O2
フラグの有無にかかわらず、gcc 4.5.2 でコンパイルされています。
これは予想される動作ですか?
このプログラムのデータ競合はありませんか?
ありがとうございました