gpt4 book ai didi

c++ - 如何终止 C++11 中的线程?

转载 作者:IT老高 更新时间:2023-10-28 11:51:54 26 4
gpt4 key购买 nike

我不需要正确终止线程,或者让它响应“终止”命令。我有兴趣使用纯 C++11 强制终止线程。

最佳答案

  1. 您可以从任何线程调用 std::terminate(),您所指的线程将强制结束。

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

  3. 你可以设计一个异常,它有一个抛出异常的析构函数。然后安排目标线程在被强制终止时抛出这个异常。这个问题的棘手部分是让目标线程抛出这个异常。

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

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

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

一个std::thread可能有这个成员函数:

native_handle_type native_handle();

您也许可以使用它来调用依赖于操作系统的函数来执行您想要的操作。例如在 Apple 的操作系统上,这个函数存在并且 native_handle_type 是一个 pthread_t。如果你成功了,你很可能会泄露资源。

关于c++ - 如何终止 C++11 中的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12207684/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com