停止正在运行的线程的安全方法是什么

本文关键字:线程 安全 方法 是什么 运行 | 更新日期: 2023-09-27 18:24:19

我有一个线程,其中包含IronPython脚本的执行。出于某种原因,我可能需要随时停止这个线程,包括脚本执行。如何做到这一点?第一个想法是Thread.Abort(),但众所周知它是邪恶的。。。

停止正在运行的线程的安全方法是什么

停止正在运行的线程的安全方法是什么?

将线程放入自己的进程中。当您希望它停止时,终止进程

这是杀死线程的唯一安全方法。中止线程可能会严重破坏进程的稳定并丢失用户数据。如果你真的,真的需要能够杀死一个可以做任何事情的线程,那么就无法避免"丢失用户数据"的情况。避免调用中止的进程不稳定的唯一方法是使它们完全不同。

根据您的问题和后续评论,我可以建议您两个选项,并附上一些额外的"警告":

  1. 如果你的线程在每次迭代中都循环执行一些东西,你可以设置一个volatile布尔标志,使其在完成当前迭代后退出(伪代码,因为我不熟悉python):

    while shouldExit = false
        // do stuff
    

    然后,当您希望线程停止时,只需将标志设置为true,它将在下次检查条件时停止。

  2. 如果您不能等待迭代完成,并且需要立即停止迭代,您可以选择Thread.Abort,但要绝对确保您无法将打开的文件句柄、套接字、锁或其他类似的东西保持在不一致的状态。