Monitor.PulseAll通知队列中所有等待的线程
Monitor.Pulse在等待队列中通知线程。 (下一个等待线程)

只有下一个线程(一个线程)才能获取锁。那么区别是什么呢?

什么时候应该使用PulsePulseAll

最佳答案

当您想唤醒多个线程时,请使用PulseAll,因为它们等待的条件现在可以满足多个线程的需要。 (等待几乎总是与条件相关联-您通常应该在while循环中测试该条件。)

当您只想唤醒一个线程时,请使用Pulse,因为实际上只有一个线程能够执行有用的工作。

举两个类比:

想象一下,您有一台打印机。一次只有一个人可以使用它,因此,如果有很多人在等,则将他们全部送休眠眠状态,但是只有在打印机空闲时才能唤醒一个人。这反射(reflect)了Pulse的使用。

现在,假设您经营一家商店。当您关门时,客户在商店外面等。当您开店时,您不仅要唤醒一位顾客,而且他们现在都可以进来。这反射(reflect)了PulseAll的使用。

10-07 23:08