【发布时间】:2011-06-02 03:54:56
【问题描述】:
我的线程如何工作的模型是一些ThreadManager 让每个线程轮流。轮到线程时,它会执行几行代码。
要暂停一个线程,难道不能让ThreadManager(暂时)停止允许该线程轮流吗?
要中止一个线程,ThreadManager 就不能再让那个线程再转一次吗?
有什么问题?
【问题讨论】:
标签: c# .net multithreading thread-safety parallel-processing
我的线程如何工作的模型是一些ThreadManager 让每个线程轮流。轮到线程时,它会执行几行代码。
要暂停一个线程,难道不能让ThreadManager(暂时)停止允许该线程轮流吗?
要中止一个线程,ThreadManager 就不能再让那个线程再转一次吗?
有什么问题?
【问题讨论】:
标签: c# .net multithreading thread-safety parallel-processing
来自MSDN 的关于暂停线程的引用:
你无法知道什么代码 挂起时线程正在执行 它。如果你挂起一个线程,而它 在安全期间持有锁 权限评估,其他线程 在 AppDomain 中可能会被阻止。如果 你挂起一个线程,而它是 执行类构造函数,其他 AppDomain 中尝试的线程 使用该类被阻止。 死锁很容易发生。
中止的线程可能会导致无法预料的情况。有一篇关于这个的好文章:http://www.bluebytesoftware.com/blog/2009/03/13/ManagedCodeAndAsynchronousExceptionHardening.aspx
【讨论】:
我同意 Alex 的观点,但要进一步详细说明,如果您需要“暂停”线程,最好查看某种锁定机制,例如信号量、互斥锁或许多其他可用的机制之一。
但是,在不知道您的代码的情况下,Windows 是一个抢占式多任务环境。通常这不是必需的,只需让您的线程运行,底层操作系统和调度程序将确保您的所有任务得到公平的轮次。
【讨论】: