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

本文关键字:线程 暂停 为什么 | 更新日期: 2023-09-27 17:58:17

我对线程工作方式的模型是,一些ThreadManager让每个线程都有一个循环。当轮到线程时,它可以执行几行代码。

要暂停一个线程,难道不能让ThreadManager(暂时)停止,让该线程转一圈吗?

要中止一个线程,难道ThreadManager就不能再让这个线程转一圈吗?

怎么了?

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

MSDN中关于暂停线程的引用:

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

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

我同意Alex的观点,但更详细地说,如果你需要"暂停"一个线程,最好看看某种锁定机制,比如Semaphores、Mutexes或其他可用的机制之一。

但是,在不了解您的代码的情况下,Windows是一个先发制人的多任务环境。通常这是不需要的,只要让你的线程运行,底层的操作系统和调度程序就会确保你的所有任务都得到公平的处理。