仅使用堆栈变量来杀死线程是否安全?

时间:2017-01-19 02:06:58

标签: multithreading kill

我有一个fortran子程序。它一旦开始就会运行很长时间。

现在,我想编写一个程序,在一个线程中从C ++调用fortran子例程。 当用户请求时,应该停止(或取消)该线程。 但子程序不支持在运行期间终止计算的任何方法。

据我所知,子程序只使用堆栈变量(没有分配)。 子程序由windows的静态库(.lib文件)给出。

在这种情况下,我可以假设杀死子程序线程不会导致资源泄漏等问题吗?

仅供参考,这是运行环境:

  • 操作系统:Windows 7 64位或以上
  • 编译器:MSVC 2015 for C ++,Intel Parallel Studio for fortran

1 个答案:

答案 0 :(得分:1)

一般情况下它不安全 - 除了内存之外,线程还可以获取其他资源。例如,它可以锁定互斥锁,如果在互斥锁被锁定时杀死了线程,互斥锁将永远保持锁定状态,可能导致其他线程死锁等待永远获取互斥锁。如果你真的无法让线程干净/自愿退出,那么唯一安全的方法是生成子进程并在子进程中运行例程。如果必须,您可以安全地终止子进程,因为操作系统将自动清除子进程分配的所有资源。