C++ C++;11多线程:执行后线程的状态

C++ C++;11多线程:执行后线程的状态,c++,multithreading,c++11,C++,Multithreading,C++11,线程完成执行后的状态是什么 它是在执行后立即销毁还是用父线程销毁?std::thread对象不同于底层控制线程(尽管它们应该映射为1对1) 这种分离非常重要,它意味着std::thread和控制线程可以有不同的生命周期。例如,如果在堆栈上创建std::thread,则在销毁对象之前,确实需要调用thread::detach(如果不这样做,析构函数将调用)。此外,正如Grizzly所指出的,您可以在对象销毁之前调用.join(),这将阻塞直到线程的执行完成 这也回答了你的问题—— STD::线程完

线程完成执行后的状态是什么


它是在执行后立即销毁还是用父线程销毁?

std::thread对象不同于底层控制线程(尽管它们应该映射为1对1)

这种分离非常重要,它意味着
std::thread
和控制线程可以有不同的生命周期。例如,如果在堆栈上创建
std::thread
,则在销毁对象之前,确实需要调用
thread::detach
(如果不这样做,析构函数将调用)。此外,正如Grizzly所指出的,您可以在对象销毁之前调用
.join()
,这将阻塞直到线程的执行完成


这也回答了你的问题——<代码> STD::线程完成后线程不被销毁——它作为每个C++对象的行为——当它超出范围时(或者得到<代码>删除< /代码>),它将被破坏。不跑。如果你的意思是

std::thread
对象,那么这些对象将被销毁。。。当它们被摧毁时。它们只是普通的对象,没有特殊的魔法规则。值得一提的是,在销毁线程之前调用
.join()
,直到线程的执行完成为止,这也是一个有效的(通常是不够正确的)选项,因此线程的生存期可以被绑定(在一定程度上)对于
std::thread
“析构函数将在该线程上调用
terminate
”。否,它将调用整个程序的
终止
。比赛结束了。