Monitor.PulseAll
通知所有等待线程在队列中。
Monitor.Pulse
通知a thread在等待队列中。 (下一个等待线程)
只有下一个线程(一个线程)才能获取锁。那么区别是什么呢?
我应该什么时候使用Pulse
vs PulseAll
?
Use PulseAll
当您想要唤醒多个线程时,因为它们正在等待的条件现在可能已满足多个线程。 (等待几乎总是与一个条件相关 - 你通常应该在一个while
loop.)
Use Pulse
当您只想唤醒一个线程时,因为实际上只有一个线程能够执行有用的工作。
举两个比喻:
想象一下您只有一台打印机。一次只有一个人可以使用它,因此如果有很多人在等待,您可以让他们都入睡 - 但当打印机空闲时您只能唤醒一个人。这反映了使用Pulse
.
现在想象一下你经营一家商店。关门时,顾客会在店外等候。当您开店时,您不仅仅是想叫醒一位顾客 - 他们现在都可以进来了。这反映了使用PulseAll
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)