繁体   English   中英

如何获取当前线程的std :: thread?

[英]How to get std::thread of current thread?

如何获得表示当前(已经运行的线程)的std::thread对象。

我知道我可以做std::this_thread::get_id() 但是,这将给我一个std::thread:id对象。

我的主要目标是允许其他一些线程加入当前线程。 但是,问题是当前的一个没有通过创建std :: thread启动,所以我不能事先保存它。

你不能得到一个std::thread对象引用一个不是由std::thread构造函数创建的std::thread 要么始终使用C ++线程库,要么根本不使用它。 例如,如果当前线程是由pthread_create创建的,则需要使用pthread_join将其连接起来。

std::thread不能复制。 能够在不从初始创建中获取资源的情况下任意获取线程将破坏线程应该如何工作。

应该或已经从调用构造函数的对象移动对线程的任何引用。

假设你的代码使用std :: thread来启动“其他线程”,那就想加入()“当前线程”

如果“当前线程”是主线程,即由main()启动的线程,则无法使其成为std :: thread()实例,原因很简单(例如,如果主线程退出,整个进程退出)。 你不应该有其他线程加入主线程。

如果“当前线程”是从您自己的代码创建的,那么您应该将其更改为使用std :: thread。

如果“当前线程”是从第三方库创建的,那么您应该使用与第三方库公开的相同的线程实现。 通常,如果第三方库希望您“加入()”他们的线程,他们会向您公开join()方法,或者表明您应该使用特定的线程实现API(例如POSIX线程)来加入。

无论哪种方式,似乎有充分的理由,你不能做你想要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM