如何在C ++ 11中终止线程?

亚历山大五世

我不需要正确终止线程,也不需要使其响应“终止”命令。我对使用纯C ++ 11强制终止线程感兴趣。

霍华德·辛南特
  1. 您可以std::terminate()从任何线程进行调用,并且您所引用的线程将强制终止。

  2. 您可以安排~thread()在目标线程的对象上执行,而无需干预join()detach()对该对象执行。这将与选项1相同。

  3. 您可以设计一个具有析构函数的异常,该析构函数会引发异常。然后安排目标线程在要强制终止该异常时引发此异常。这方面的棘手部分是使目标线程抛出此异常。

选项1和2不会泄漏进程内资源,但它们会终止每个线程。

选项3可能会泄漏资源,但部分协作是因为目标线程必须同意引发异常。

C ++ 11(我知道)没有可移植的方式来非合作地杀死多线程程序中的单个线程(即不杀死所有线程)。没有动机去设计这样的功能。

std::thread可具有该成员函数:

native_handle_type native_handle();

您可能可以使用它来调用依赖于OS的函数来执行所需的操作。例如,在Apple的OS上,此功能存在并且native_handle_typepthread_t如果成功,则很可能会泄漏资源。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章