C++11 什么时候是析构函数或终止于调用
我使用的是C++11 std::thread。我的困惑是基于以下几点: 如果线程上既没有调用C++11 什么时候是析构函数或终止于调用,c++11,stdthread,C++11,Stdthread,我使用的是C++11 std::thread。我的困惑是基于以下几点: 如果线程上既没有调用join()也没有调用detach(),则会调用线程上的terminate()。 这意味着当线程返回时: a.它检查是否调用了它上面的join()或detach(),如果没有,则调用terminate()(生成一个coredump) b.如果调用了join(),线程的析构函数将由main(或调用线程)调用 c.如果在线程执行时调用了detach(),则该线程不会返回main进行清理,而是由该线程本身负责调
join()
也没有调用detach()
,则会调用线程上的terminate()
。
这意味着当线程返回时:
a.它检查是否调用了它上面的join()
或detach()
,如果没有,则调用terminate()
(生成一个coredump)
b.如果调用了join()
,线程的析构函数将由main(或调用线程)调用
c.如果在线程执行时调用了detach()
,则该线程不会返回main进行清理,而是由该线程本身负责调用自己的析构函数
问题:如果以上几点都是真的,那么我不明白在哪个确切点终止线程的决定是基于是否调用了join()
还是detach()
void function_1()
{
return;
}
int main()
{
std::thread t1(function_1);
std::cout<<"\nFirst Sleep for 5 seconds:\n";
sleep(5);
cout<<"\n2nd Sleep for 5 seconds:\n";
sleep(5);
if(t1.joinable())
{
cout<<"\nGonna join()\n";
t1.detach();
}
cout<<"Exiting from main ...\n";
void函数_1()
{
返回;
}
int main()
{
std::线程t1(函数_1);
std::cout看起来您混淆了两件事:std::thread
对象和该对象管理的执行线程
对std::terminate
的调用由std::thread
对象的析构函数触发(如果它是可接合的)。这与std::thread
对象管理的执行线程是否已完成执行没有直接关系
<> >代码中的析构函数:<代码> t1>代码>:触发<代码>:ST::<代码> T1<代码>是一个普通C++对象,这里是代码<> main < /代码>的局部变量。当它的范围结束时,它被破坏了。这里主要是main。/在t1
上执行code>或detach
。函数_1
是否已在其执行线程上完成运行与此无关