暂停/中止线程为什么不好?

时间:2011-06-02 03:54:57

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

我的线程如何工作的模型是一些ThreadManager给每个线程一个转弯。当它是一个线程时,它会执行几行代码。

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

要中止某个帖子,ThreadManager是不是只能再转动该线程?

有什么问题?

2 个答案:

答案 0 :(得分:12)

引用MSDN关于暂停线程:

  

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

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

答案 1 :(得分:4)

我同意Alex的观点,但是为了进一步详细说明,如果你需要“暂停”一个线程,那么最好看看某种锁定机制,如信号量,互斥体或其他许多可用的锁定机制。

但是,在不知道您的代码的情况下,Windows是一种先发制人的多任务处理环境。通常这不是必需的,只需让您的线程运行,底层操作系统和调度程序将确保您的所有任务都得到合理的转变。