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

时间:2013-12-11 15:45:43

标签: c++ multithreading boost boost-thread intel-mkl

¿如何中断正在执行MKL子程序的线程?在其他第三方图书馆?我的线程是用boost :: thread创建的,通常我使用中断来阻止我的线程(http://www.boost.org/doc/libs/1_41_0/doc/html/thread/thread_management.html#thread.thread_management.interruption),但是如何阻止线程执行MKL代码?有什么想法吗?

提前致谢

1 个答案:

答案 0 :(得分:3)

简而言之:你做不到。

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

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

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