2011-06-02 53 views
7

我的线程如何工作的模型是一些ThreadManager给每个线程轮流。当它轮到一个线程时,它会执行几行代码。为什么暂停/中止线程很糟糕?

要暂停一个线程,不能只有一个只有ThreadManager(暂时)停止允许该线程转弯?

要中止一个线程,不能ThreadManager只是永远不会让这个线程又一个回合?

有什么问题?从MSDN

回答

12

报价有关暂停线程:

你不知道一个 线程执行哪些代码的方式,当你暂停 它。如果您在安全 权限评估过程中挂起一个线程,而其 持有锁定,则可能会阻止AppDomain中的其他线程 。如果 您挂起一个线程,而 执行一个类构造函数,则尝试 的AppDomain中的其他 线程将被阻止。 死锁很容易发生。

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

4

我同意Alex的观点,但是要进一步阐述,如果你需要“暂停”一个线程,最好是看看像Semaphores,Mutexes这样的锁定机制,或许多其他可用的之一。

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

+0

+1为受控锁定方法。 – 2011-06-02 05:18:42

相关问题