线程执行完成后的状态是什么?
是执行完立即销毁还是随父线程一起销毁?
最佳答案
std::thread
对象不同于底层控制线程(尽管它们应该一对一映射)。
这种分离非常重要,它意味着 std::thread
和控制线程可以有不同的生命周期。例如,如果你在堆栈上创建你的 std::thread
,你真的需要在你的对象被销毁之前调用 thread::detach
(如果你没有析构函数将调用 terminate )。此外,正如 Grizzly 指出的那样,您可以在对象销毁之前调用 .join()
,这将阻塞直到线程执行完成。
这也回答了您的问题 - std::thread
对象在线程完成后不会被销毁 - 它的行为与所有其他 C++ 对象一样 - 当它超出范围时将被销毁(或被删除
)。
关于C++11 多线程 : State of thread after execution,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18869373/