gpt4 book ai didi

c++ - C++ 11线程在分离后是否自动销毁

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:18:10 26 4
gpt4 key购买 nike

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

根据 this article

Once detached, the thread should live that way forever.

永远?如果线程的功能结束,它的资源是否永远保留?

根据 this article

After a call to this function, the thread object becomes non-joinable and can be destroyed safely.

它可以安全销毁,但它是自动销毁的吗?

如果不是自动销毁,如何销毁(不是强制销毁,而是在线程函数结束后销毁)

感谢阅读。

最佳答案

您应该查阅更好的引用资料。来自 std::thread::detach :

Separates the thread of execution from the thread object, allowing execution to continue independently. Any allocated resources will be freed once the thread exits.

After calling detach *this no longer owns any thread.

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

forever?

没有。如果线程完成(例如:如果计数到 10),则线程完成并且不再运行。

Does its resource remain forever?

不,当线程结束时,线程中的每个资源都被释放(比如变量等)。

It can be destroyed safely, but is it automatically?

什么意思?当线程完成时,它会被(自动)销毁,无论您是否调用 detach 。唯一的区别是,在这里,它们指的是线程对象,因此是实际的 std::thread 实例。

因此,当线程对象被析构时,您必须调用joindetach,无论您是否认为实际线程已完成。如果不这样做,将调用 std::terminate

关于c++ - C++ 11线程在分离后是否自动销毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45685463/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com