mhl*_*666 9 c++ multithreading standards-compliance boost-thread c++11
根据草案C++ 0x标准,这段代码:
void simplethread()
{
boost::thread t(someLongRunningFunction);
// Commented out detach - terminate() expected.
// t.detach();
}
Run Code Online (Sandbox Code Playgroud)
...应该导致terminate()调用,但是在当前(boost 1.46.1)的boost线程实现中它没有,线程只是在析构函数中分离并继续.
我的问题是:为什么?
我认为boost :: thread与草案标准一样多.
这有设计理由吗?它会在未来版本的boost :: thread中改变吗?
How*_*ant 24
原因主要是历史性的. boost::thread先来了.提案std::thread源于boost::thread并且最初具有boost::thread现在的行为.
然而在标准化过程的人显著数量要std::thread::~thread()以join()在析构函数如果尚未加入,而不是,detach().每一方都提出了争论,并进行了投票.50/50.提出了更多的论点,并进行了更多的投票.有些人摇摆到另一个位置.但仍然是50/50.
有人(我不记得是谁)建议的terminate().虽然没有一致赞成(我不能投票赞成),但它确实得到了足够的多数,被称为共识.
我想象boost::thread永远不会改变,因为它有一个已安装的用户群,没有人想要不必要地破坏该用户群的代码.
编辑:
啊,Rob向我们指出了这个重复问题的原始问题,答案指向N2802,其中包括基本原理.
我还应该注意,std::thread有线程取消的原始提议,〜thread()将取消unjoined-thread然后分离它,这很有意义.通常只有在父线程由于异常而展开时才会选择此代码路径.