任何人都可以通过以下方式向我解释为什么std::thread
与boost::thread
不同:
try_join_for
/ try_join_until
方法interrupt
方法https://isocpp.org/wiki/faq/cpp11-library-concurrency有一些解释:
无法请求线程终止(即请求尽快退出并尽可能优雅地退出)或强制线程终止(即终止它)。我们留下了
的选项std::quick_exit()
),std::terminate()
)。
这是委员会可以同意的全部内容。特别是POSIX的代表强烈反对任何形式的“线程取消”,但是很多C ++的资源模型都依赖于析构函数。每个系统和每个可能的应用都没有完美的解决方案。但也许还有更完整的解释?这些方法(try_join
和interrupt
)有时非常有用。
答案 0 :(得分:5)
嗯,你自己回答了你的问题。 boost和c ++ 11标准之间的重要区别在于,c ++ 11是一个标准。所以基本上每个人都必须同意与线程相关的方法和功能。但正如你已经告诉我们的那样,"这些方法(try_join和中断)有时非常有用"
那么将它作为标准强加于每个编译器是否合理?也许,但如果你真的需要它,你也可以简单地使用提升等效物,直到它可能有一天进入标准。
@ Howard-Hinnant建议:委员会有声音坚决声称合作线程取消不能在C ++中可移植地实现。当时boost :: thread没有中断。因此,安东尼·威廉姆斯实施了对提升的中断,这在很大程度上是因为目前提出的概念证明可以可移植地实施。委员会在很大程度上忽略了这一概念证明,主要是因为已经花了很多时间来讨论这个问题,因为这个问题导致我们面临着整个标准下沉的风险。