在x秒后终止正在运行的线程的最佳方法是什么?
What is the best way to kill a running thread after x secconds?
我正在做一个c++项目,它加载共享对象并在单独的线程中对它们运行一个方法。如果这些线程还没有终止,系统要求在x秒后关闭所有这些线程。我能够跟踪哪些线程已经关闭,但是杀死尚未完成的线程的最好方法是什么?
旁注- Pthread_cancel导致分段错误。
不行。你不能取消一个没有它的合作的线程,而不冒着破坏进程上下文的风险。
线程不提供这种隔离。他们就是不这么做。如果线程失败,则进程失败。您需要将不可信或不可靠的代码包含在其自身的进程、虚拟机或类似的地方。线程是完全可渗透的。
线程做的最常见的事情之一是:
-
获取锁
-
打破一些不变量(由锁保护)
-
恢复不变量
-
释放锁
现在想象一下,如果线程已经完成了步骤2,但没有完成步骤3。您不能释放锁(因为这会导致下一个获取该锁的线程遇到损坏的不变量),也不能让锁保持不变(因为这会导致下一个试图获取该锁的线程永远等待)。因此,进程上下文将在此时被销毁。
你需要线程的配合来恢复不变量
我的建议是:
使用两个线程运行并中断一个无限循环
简而言之,设置一个线程需要经常检查的退出条件。如果设置了,它们应该返回。如果所有线程都应该一起死亡,那么只需要一个原子。
相关文章:
- 将线程中的数据存储到全局容器的最佳方法?
- 最佳做法是从另一个线程访问 qml 中的Q_PROPERTY
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- std::使用类成员函数创建线程 - 最佳实践
- 等待线程的最佳方式是什么
- 存储/传递 v8 承诺解析器供以后使用的最佳实践?(结合C++线程)
- 套接字发送(.)线程的最佳数量
- 线程数据封装最佳实践
- 最佳多线程全局变量管理
- 从QTcpSocket上的数据流中连续运行复杂算法的最佳Qt线程解决方案是什么
- 多线程 UI 的最佳方式
- 暂停和恢复线程的最佳解决方案是什么?
- 使用来自不同线程的实时数据更新QTableView的最佳策略
- 从线程更新进度条的最佳方式
- C++/Win32 我在 Windows 2000+ 上启动线程的最佳方式
- 控制对多线程程序中字符串对象的访问的最佳方法
- std::线程管理:用法和最佳实践
- 在多个相互依赖的线程上进行封送处理和等待的算法、模式或最佳实践
- CUDA扭曲和每个块的最佳线程数
- 处理字符串的最佳线程数