這是例如:差分
#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
編譯用gcc 4.5.2,具有和不具有-O2
這是預期的行爲?
這個程序數據競賽是免費的嗎?
thread t1(f1, std::ref(ret));
更多信息here:
如果你想通過參考std::thread
則必須將他們每個人在std::ref
傳遞參數謝謝
正確答案。 Upvoted。 – 2011-02-25 11:58:51
這真的幫助了我,謝謝+1。如果這個消息仍然會被任何人注意到,我可以問一下'thread'使用這個機制的原因。這與c有關,還是它有一個完全不同的原因? – patrik 2014-05-15 07:01:44
@patrik與存儲引用或指針相比,值語義(複製)是安全的。當引用的對象被銷燬時,引用或指針可能會變得懸而未決。這就是爲什麼'std :: bind'和'std :: thread'默認存儲參數的值,你必須明確地要求它做一個不太安全的事情。 – 2014-05-15 08:39:22