1. 程式人生 > >c++11 std::thread使用注意事項

c++11 std::thread使用注意事項

用std::thread建立執行緒object時,有以下要注意的地方:
1.如果引數有隱式轉換,這個轉換是在新的執行緒context下進行的
比如:

void f(int i,std::string const& s);
char a[] = "hello";
std::thread t(f,3,a);

這種情況下,新執行緒呼叫 f 函式時,引數是char const ,因為std::thread建構函式模板形成的引數是char const
如果執行緒在為函式引數作轉換前,std::thread t(f,3,a) 語句所在函式退出,那麼這個引數就是個dangling pointer,野指標了。
可以用std::string(a)這樣的引數避免。

2.如果引數是引用,那麼實際上也是複製。其緣由也是模板作怪。
可以用std::ref來實現引用。