【发布时间】:2014-04-24 09:25:12
【问题描述】:
谁能解释一下为什么std::thread 与boost::thread 不同:
- 它没有
try_join_for/try_join_until方法 - 没有
interrupt方法
https://isocpp.org/wiki/faq/cpp11-library-concurrency有一些解释:
没有办法请求线程终止(即要求它尽快且尽可能优雅地退出)或强制线程终止(即杀死它)。我们剩下的选项是
- 设计我们自己的协作“中断机制”(调用者线程可以设置一个共享数据供被调用线程检查,并在设置后快速优雅地退出),
- 通过使用 thread::native_handle() 来“实现原生化”,以访问操作系统的线程概念,
- 杀死进程(
std::quick_exit()), - 杀死程序(
std::terminate())。 这是委员会所能达成的全部协议。特别是,来自 POSIX 的代表强烈反对任何形式的“线程取消”,无论 C++ 的资源模型在很大程度上依赖于析构函数。对于每个系统和每个可能的应用,没有完美的解决方案。
但也许有更完整的解释?此类方法(try_join 和 interrupt)有时非常有用。
【问题讨论】:
-
你如何定义
interrupt除了正式地“执行未定义的行为”之外的功能? -
@Yakk Like this.
-
@casey 不错。基本上每个并发原语上都有一个附加的隐式信号。这确实违反了“你不用为你使用的东西付费”,除非你变得非常非常聪明......但是我猜每个同步的分支足够便宜。
标签: c++11 concurrency c++-standard-library