【问题标题】:terminate all threads or currently running thread keeping the process alive in c++终止所有线程或当前正在运行的线程,使进程在 C++ 中保持活动状态
【发布时间】:2017-08-10 00:27:09
【问题描述】:

我想在进程收到停止消息时终止所有当前正在运行的线程。但我希望进程继续运行以接受新请求。我使用 c++ std::thread 而不是 pthreads

【问题讨论】:

  • 将停止消息转发给所有正在运行的线程,让它们定期检查消息,如果找到则返回。
  • 进程的线程数比它启动的 n 个线程多 1 个。我将此线程称为“main()”,它会继续运行直到退出。
  • 您可能不想杀死(终止)线程,因为它们可能持有锁或其他会破坏一切的东西。您想很好地要求他们在他们处于良好状态时终止。这意味着线程需要定期检查它们是否应该退出。
  • 感谢您的 cmets。但我不使用 pthread 库

标签: c++ linux terminate terminate-handler


【解决方案1】:

简而言之:您不能在 ISO c++ 中杀死线程。你只能例如重复轮询线程内的标志并停止进一步处理。

由于 std::threads 通常是在 Linux 上的 pthreads 之上实现的,因此您也许可以利用该 API,例如看看pthread_cancel。但是请记住,这不会触发任何 c++ 析构函数,因此在执行此操作时必须非常小心以避免资源泄漏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多