【问题标题】:Why is it bad to pause/abort threads?为什么暂停/中止线程不好?
【发布时间】:2011-06-02 03:54:56
【问题描述】:

我的线程如何工作的模型是一些ThreadManager 让每个线程轮流。轮到线程时,它会执行几行代码。

要暂停一个线程,难道不能让ThreadManager(暂时)停止允许该线程轮流吗?

要中止一个线程,ThreadManager 就不能再让那个线程再转一次吗?

有什么问题?

【问题讨论】:

    标签: c# .net multithreading thread-safety parallel-processing


    【解决方案1】:

    来自MSDN 的关于暂停线程的引用:

    你无法知道什么代码 挂起时线程正在执行 它。如果你挂起一个线程,而它 在安全期间持有锁 权限评估,其他线程 在 AppDomain 中可能会被阻止。如果 你挂起一个线程,而它是 执行类构造函数,其他 AppDomain 中尝试的线程 使用该类被阻止。 死锁很容易发生。

    中止的线程可能会导致无法预料的情况。有一篇关于这个的好文章:http://www.bluebytesoftware.com/blog/2009/03/13/ManagedCodeAndAsynchronousExceptionHardening.aspx

    【讨论】:

      【解决方案2】:

      我同意 Alex 的观点,但要进一步详细说明,如果您需要“暂停”线程,最好查看某种锁定机制,例如信号量、互斥锁或许多其他可用的机制之一。

      但是,在不知道您的代码的情况下,Windows 是一个抢占式多任务环境。通常这不是必需的,只需让您的线程运行,底层操作系统和调度程序将确保您的所有任务得到公平的轮次。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-09
        • 1970-01-01
        • 2019-09-18
        相关资源
        最近更新 更多