完成执行后线程的状态是什么。?
它是在执行后立即销毁还是用父线程销毁。?
答案 0 :(得分:4)
std::thread
对象与底层控制线程不同(尽管它们应该映射1对1)。
这种分离非常重要,它意味着std::thread
和控制线程可以有不同的生命周期。例如,如果在堆栈上创建std::thread
,则确实需要在对象被销毁之前调用thread::detach
(如果没有析构函数将调用terminate)。此外,正如Grizzly指出的那样,你可以在你的对象销毁之前调用.join()
,它将阻塞直到线程的执行完成。
这也回答了你的问题 - std::thread
对象在线程完成后没有被销毁 - 它的行为与其他每个C ++对象一样 - 当它超出范围时它将被销毁(或者得到{{1 }})。