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



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

提前感谢

简而言之:你不能。

Boost使用的线程中断点必须协同使用,也就是说,要中断的代码需要主动触发一个可以充当中断点的函数调用。既然MKL不这么做,你就倒霉了。

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

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

最新更新