GCCを使用すると、からを構築できますが、std::thread::id
からstd::thread::native_handle_type
構築することはできませんstd::thread
。
つまり、特定のスレッドがオブジェクト(または)pthread_t
と同じスレッドを参照しているかどうかをテストできますが、そこから新しいオブジェクトを作成することはできません。std::thread
this_thread::get_id()
thread
Aは、スレッドに対する一意のstd::thread
ハンドルになるように設計されています。別のオブジェクトが基になるスレッドの所有権を取得する唯一の方法は、元のスレッドからオブジェクトを移動することです。したがって、一度に1つのオブジェクトだけがそのスレッドを「所有」します。ネイティブハンドルからそれらを構築できる場合は、次のことができます。thread
// start new thread
std::thread t(&thread_func);
// now have two handles to the same thread
std::thread t2( t.native_handle() );
std::thread t1.join();
// erm, hang on, this isn't right
std::thread t2.join();
この動機は、ネイティブプラットフォームのスレッドAPIを使用して、特定のアフィニティや特定のスタックサイズ(またはC ++ 11 APIを介してアクセスできないその他の特性)を使用してスレッドを設定することが望ましい場合があることです。 )。
理想的には、プラットフォームでは、スレッドを構築するときにアフィニティやスタックサイズなどのパラメータを指定できます。これにより、「非所有」thread
オブジェクトを構築することで型システムを弱めることなく、これらのプラットフォーム固有の機能を使用できます...ただし、少なくともGCCはそれをサポートしていません。