为什么std :: thread没有try_join_for()和interrupt()方法

And*_*G.A 6 concurrency c++-standard-library c++11

谁能解释我为什么与以下内容std::thread不同boost::thread:

  1. 它没有try_join_for/ try_join_until方法
  2. 没有interrupt办法

https://isocpp.org/wiki/faq/cpp11-library-concurrency提供了一些解释:

无法请求线程终止(即请求它尽快并尽可能优雅地退出)或强制线程终止(即杀死它)。我们剩下的选择

  1. 设计我们自己的协作式“中断机制”(具有一个共享数据,调用者线程可以设置该共享数据以供被调用线程检查,并在设置该线程时快速而优美地退出),
  2. 通过使用thread :: native_handle()获得对操作系统的线程概念的访问权,从而实现“本地化”
  3. 终止进程(std::quick_exit()),
  4. 终止程序(std::terminate())。这是委员会可以同意的所有事情。特别是,POSIX的代表强烈反对任何形式的“线程取消”,但是C ++的许多资源模型都依赖于析构函数。对于每个系统和每个可能的应用程序,没有完美的解决方案。

但是也许还有更完整的解释?此类方法(try_join和interrupt)有时非常有用。

The*_*dis 5

好吧,你自己回答了问题。boost和c ++ 11标准之间的重要区别是c ++ 11是标准。因此,基本上每个人都必须同意与线程相关的方法和功能。但是正如您已经告诉我们的那样,“此类方法(try_join和interrupt)有时非常有用”

因此,将其作为标准强加给每个编译器是否合理?也许可以,但是如果您真的需要它,您也可以简单地使用等效的升压功能,直到有一天它成为标准。

@ Howard-Hinnant建议:委员会上有声音坚决宣称合作线程取消不能在C ++中实现。当时boost :: thread没有中断。因此,Anthony Williams在很大程度上实施了中断以提高效率,这是目前提出的,以证明它可以轻而易举地实施。该概念证明在很大程度上被委员会忽略了,主要是因为已经在这个主题上花费了太多时间,因此我们有可能因为这个问题而陷入整个标准的沉沦中。

  • 我要补充一点,委员会上有人坚决主张合作线程取消**不能**在C ++中实现。当时boost :: thread没有中断。因此,安东尼·威廉姆斯(Anthony Williams)很大程度上按照目前提议的方式实施了中断提升,以证明它“可以**移植”。该概念证明在很大程度上被委员会忽略了,主要是因为已经在这个主题上花费了太多时间,因此我们有可能因为这个问题而陷入整个标准的沉沦中。 (5认同)
  • 委员会用C ++ 11完成了许多伟大的工作。这不是其中之一。 (2认同)
  • 对于那些不满的人:如果您给我留下评论,我可以尝试找出改进方法和改进方法: (2认同)