分离后C++ 11线程是否会自动销毁

123*_*ing 6 c++ multithreading thread-safety c++11

通常,我会假设C++ 11线程在分离后自动销毁.但问题是,我找不到任何证明这一假设的东西.

根据这篇文章

一旦分离,线程应该永远这样.

永远?如果线程的功能完成,它的资源是否永远存在?

根据这篇文章

调用此函数后,线程对象变为不可连接,可以安全销毁.

它可以安全销毁,但它是否会自动销毁?

如果它没有自动销毁,如何销毁它(不是强行,但在线程结束后的功能)

谢谢阅读.

Rak*_*111 9

您应该参考更好的参考.来自std::thread::detach:

将执行线程与线程对象分开,允许执行独立继续.线程退出后,将释放任何已分配的资源.

调用detach之后*this不再拥有任何线程.

所以回答你的问题(如果还没有):

永远?

否.如果线程结束(例如:如果它计数到10),则完成并且它不再运行.

它的资源是否永远存在?

不,当线程完成时,线程中的每个资源都被释放(如变量等).

它可以安全销毁,但它是否会自动销毁?

你什么意思?线程完成后,无论您是否通话,它都会被自动销毁detach.唯一的区别是,在这里,它们指的是线程对象,所以实际的std::thread实例.

因此,当线程对象被破坏时,您必须已经调用join或者detach无论您是否拥有实际线程已完成.如果你不这样做,std::terminate就叫.