2016-09-25 112 views
-1

我最近看了這個std::thread參考。std ::線程移動構造函數

對於移動構造函數,它說:

thread(thread&& other); 

移動的構造。構造線程對象來表示由 其他表示的執行線程。 此次調用後其他不再代表 執行的線程。

此外,在下面的例子中有這些行:

int n=0; 
std::thread t3(f2, n); 
std::thread t4(std::move(t3)); // t4 is now running f2(). t3 is no longer a thread 

什麼我不明白是什麼螺紋t3t4到底會發生? t4是否等到t3完成執行?這是什麼意思t3不再是一個線程?

+3

「這個調用後,其他不再代表執行的線程」。 – juanchopanza

+0

那意味着什麼?它立即停止執行? –

+1

可能*表示執行線程的C++對象與執行線程* actual *之間存在差異。它類似於'std :: unique_ptr'表示某些內存的潛在所有權,但不是它自己的內存。這是「資源處理」與實際資源。 –

回答

3

std::thread不是線程。它是由一個底層操作系統提供的線程表示,您可以使用它來操作該線程。這就像一個car的對象不是一輛真正的汽車。

move將代表從一個std::thread代表的線程移動到另一個。 move,t3之後是無味的std::threadstd::thread對象仍然存在,但t3沒有引用任何實際的系統線程。 t4現在代表之前由t3代表的線程,但它不會等待,除非您致電join

+0

好的!現在有道理,你的第一句話明確表達了。謝謝! –