在x秒后杀死正在运行的线程的最佳方法是什么?

时间:2014-07-16 22:38:25

标签: c++ multithreading segmentation-fault

我正在开发一个c ++项目,该项目加载共享对象并在不同的线程中对它们运行方法。如果系统尚未终止,则系统要求在x秒后关闭所有这些线程。我能够跟踪哪些线程已经关闭但是什么是杀死尚未完成的线程的最佳方法?

Side Note- Pthread_cancel导致分段错误。

2 个答案:

答案 0 :(得分:3)

无法做到。如果没有合作,你就不能取消一个线程,而不会有破坏进程上下文的风险。

线程不提供这种隔离。他们只是没有。如果线程失败,则该过程失败。您需要在其自己的进程,虚拟机等中包含不受信任或不可靠的代码。线程是完全可渗透的。

线程最常见的事情之一是:

  1. 获取锁定。

  2. 打破一些不变量(受锁定保护)。

  3. 恢复那些不变量。

  4. 解锁。

  5. 现在想象一下,如果线程已经完成了第2步而不是第3步。你无法释放锁(因为这会导致下一个线程获取锁以遇到破坏的不变量)并且你不能离开锁保持(因为这将导致下一个线程尝试获取锁以永远等待)。因此,此时的流程上下文将被销毁。

    你需要线程的合作才能恢复不变量。

答案 1 :(得分:0)

我建议在这里提出一些建议:

Run and break an infinite loop using two threads

简而言之,设置一个退出条件,您的线程需要经常检查。如果设置,他们应该返回。如果所有线程都应该死在一起,那么你只需要一个原子。