C++ 为什么boost::thread的析构函数要分离可连接线程,而不是像标准建议的那样调用terminate()?

C++ 为什么boost::thread的析构函数要分离可连接线程,而不是像标准建议的那样调用terminate()?,c++,multithreading,c++11,boost-thread,standards-compliance,C++,Multithreading,C++11,Boost Thread,Standards Compliance,根据C++0x标准草案,此代码: void simplethread() { boost::thread t(someLongRunningFunction); // Commented out detach - terminate() expected. // t.detach(); } 。。。应该会导致一个terminate()调用,但在boost线程的当前(boost 1.46.1)实现中,它不会,线程只是在析构函数中分离并继续 我的问题是:为什么 我认为bo

根据C++0x标准草案,此代码:

void simplethread()
{
    boost::thread t(someLongRunningFunction);
    // Commented out detach - terminate() expected.
    // t.detach();  
}
。。。应该会导致一个terminate()调用,但在boost线程的当前(boost 1.46.1)实现中,它不会,线程只是在析构函数中分离并继续

我的问题是:为什么

我认为boost::thread尽可能地与标准草案保持一致

这有设计上的原因吗?
在boost::thread的未来版本中它会被更改吗

原因主要是历史原因<代码>boost::线程排在第一位。
std::thread
的提案源于
boost::thread
,最初具有
boost::thread
现在的行为

然而,在标准化过程中,有相当多的人希望
std::thread::~thread()
在析构函数中加入
join()
,而不是
detach()
。双方进行了辩论,并进行了投票。50/50. 进行了更多的辩论,进行了更多的投票。有些人被推到了另一个位置。但仍然是50/50

有人(我不记得是谁)建议
terminate()
。投票结果被采纳了,尽管它没有获得一致的赞成票(我不能投赞成票),但它确实获得了足够多的多数票,被称为“共识”

我想,
boost::thread
从未改变过,因为它有一个已安装的用户群,没有人想不必要地破坏该用户群的代码

编辑:

啊,罗布给我们指出了这个重复问题的原文,还有那个 答案包括基本原理

我还应该注意到,
std::thread
的原始方案中有线程取消,而~thread()将取消未连接的线程,然后将其分离,这很有意义。此代码路径通常仅在父线程因异常而展开时选择。

请参阅