中断正在执行 MKL 或其他第三方函数的线程

Posted

技术标签:

【中文标题】中断正在执行 MKL 或其他第三方函数的线程【英文标题】:Interrupt a thread that is executing a MKL or other third party function 【发布时间】:2013-12-11 15:45:42 【问题描述】:

¿如何中断正在执行 MKL 子例程的线程?在其他 3rd 方库中?我的线程是使用 boost::thread 创建的,通常我会使用中断来停止我的线程 (http://www.boost.org/doc/libs/1_41_0/doc/html/thread/thread_management.html#thread.thread_management.interruption),但是如何才能停止执行 MKL 代码的线程呢?有什么想法吗?

提前致谢

【问题讨论】:

【参考方案1】:

简而言之:你不能。

Boost使用的线程中断点必须协同使用,即要被中断的代码需要主动触发一个可以充当中断点的函数调用。由于 MKL 不这样做,所以你运气不好。

解决此问题的最佳方法是将您的问题分成不需要很长时间执行的小块,然后检查块处理之间的中断请求。

为了完整起见:某些 API 允许蛮力取消不需要被取消线程许可的线程(Boost 不是其中之一)。但是,使用这种方法非常危险,因为被取消的线程通常无法正确清理,因此很容易使程序处于损坏状态。如果您决定走这条路,使用不同的进程而不是线程可能是一个更好的主意,因为强制终止进程比终止线程更不容易出错。

【讨论】:

以上是关于中断正在执行 MKL 或其他第三方函数的线程的主要内容,如果未能解决你的问题,请参考以下文章

(王道408考研操作系统)第二章进程管理-第三节3:实现进程互斥的硬件方法

如何使作业/线程与崩溃隔离

linux读书笔记第三章

为啥我的线程函数中的局部变量会被其他线程中断?

如何找到我的程序的 main(...) 函数?

有没有办法中断,终止或以其他方式解除(释放同步锁)一个死锁的Java线程,允许其他线程继续?