2016-09-25 9 views
-1

私は最近このstd::threadの参照を見ました。それが言う移動コンストラクタのstd :: thread moveコンストラクタ

thread(thread&& other); 

移動コンストラクタ。 で表される実行スレッドを表すスレッドオブジェクトを構築します。 この呼び出しの後、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で何が起こりますか? t4t3の実行が終了するまで待機しますか? t3はもはやスレッドではないということは何ですか?

+3

"この呼び出しの後、otherはもはや実行スレッドを表していません"。 – juanchopanza

+0

それはどういう意味ですか?それはすぐにその実行を停止する? –

+1

潜在的に*実行スレッドを表すC++オブジェクトと*実際の実行スレッドとの間には違いがあります。これは 'std :: unique_ptr'がメモリの潜在的な所有権をどのように表しているのかと似ていますが、それ自体はメモリではありません。それは "リソースハンドル"と実際のリソースです。 –

答えて

3

std::threadはスレッドではありません。これは、スレッドを操作するために使用できる基礎となるオペレーティングシステムによって提供されるスレッドの表現です。これはちょうどcarオブジェクトのようなもので、実際には車ではありません。

move表現するスレッドをstd::threadから別のものに移動します。 moveの後には、t3はgutless std::threadです。 std::threadオブジェクトはまだ存在しますが、t3は実際のシステムスレッドを参照しません。 t4は以前はt3で表されたスレッドを表しますが、joinを呼び出さない限り待機しません。

+0

今、あなたの最初の文はそれを明確にしました。ありがとうございました! –

関連する問題