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

What is the best way to kill a running thread after x secconds?

本文关键字:最佳 线程 方法 是什么 运行 终止      更新时间:2023-10-16

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

旁注- Pthread_cancel导致分段错误。

不行。你不能取消一个没有它的合作的线程,而不冒着破坏进程上下文的风险。

线程不提供这种隔离。他们就是不这么做。如果线程失败,则进程失败。您需要将不可信或不可靠的代码包含在其自身的进程、虚拟机或类似的地方。线程是完全可渗透的。

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

  1. 获取锁

  2. 打破一些不变量(由锁保护)

  3. 恢复不变量

  4. 释放锁

现在想象一下,如果线程已经完成了步骤2,但没有完成步骤3。您不能释放锁(因为这会导致下一个获取该锁的线程遇到损坏的不变量),也不能让锁保持不变(因为这会导致下一个试图获取该锁的线程永远等待)。因此,进程上下文将在此时被销毁。

你需要线程的配合来恢复不变量

我的建议是:

使用两个线程运行并中断一个无限循环

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