使用 GCC,您可以std::thread::id
从 a构造 a,std::thread::native_handle_type
但不能std::thread
从它构造 a。
这意味着您可以测试给定是否与对象(或指向)pthread_t
引用相同的线程,但您不能从中创建新对象。std::thread
this_thread::get_id()
thread
Astd::thread
被设计为线程的唯一句柄。不同对象获取底层线程所有权的唯一方法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 不支持这样做。