我有多个线程,如何暂停/恢复它们?
来自重复的问题:
我如何暂停 5 个线程,并记住它们的状态。因为其中一个在吃,另一个在思考,等等。
如果您正在使用System.Threading.Thread
,然后你可以打电话Suspend
and Resume
。但不建议这样做。当你调用时,不知道线程可能在做什么Suspend
。如果你打电话Suspend
例如,当线程持有锁或打开文件以进行独占访问时,其他任何东西都无法访问锁定的资源。
作为文档线程挂起 says:
不要使用暂停和恢复
同步活动的方法
线程。你无从得知
线程何时执行什么代码
你暂停它。如果您暂停
线程在一个过程中持有锁
安全权限评估、其他
AppDomain 中的线程可能是
被阻止。如果你暂停一个线程
它正在执行一个类构造函数,
AppDomain 中的其他线程
尝试使用该类会被阻止。
死锁很容易发生。
通常,您可以使用事件等同步原语来控制线程的活动。线程将等待一个事件(查看AutoResetEvent
and ManualResetEvent
)。或者,如果线程正在为队列提供服务,您将使用类似的东西BlockingCollection
这样线程就可以等待有东西被放入队列中。所有这些非繁忙等待技术都比任意挂起和重新启动线程要好得多,并且不会遭受潜在的灾难性后果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)