http://msdn.microsoft.com/en-us/library/aa332339(VS.71).aspx说wait“释放对象上的锁,并阻塞当前线程,直到它重新获得锁。”这基本上意味着锁切换(释放,给另一个线程一个运行的机会,重新获取锁)。但这不就是Pulse()要做的吗?与Pulse的唯一细微区别是它会永久地发出信号来获取锁吗?
C#线程指南(http://www.albahari.com/threading/part4.aspx#_Wait_and_Pulse)有一个非常好的类比:
“把它想象成一个自动停车场:你首先在收费站排队以确认你的车票(等待队列);”
因此,对于MSDN描述,这意味着当释放锁和阻塞(与等待锁切换相同)时,一辆车通过,然后屏障(锁)就会倒下?
发布于 2010-02-04 19:22:55
Monitor.Wait和Monitor.Pulse是一种特定的模式来支持在.NET中的任何引用对象上创建条件变量,在这个特定的模式之外它们是无用的(或者至少我还没有看到任何这样的用法)。
区别在于:
Wait:释放锁,等待脉冲(当然是来自另一个线程),然后重新获取lock.Pulse:释放锁,向另一个等待的线程发出信号,然后重新获取锁。这中间位:等待与信号是两种方法之间的差异,这种差异启用了安全的线程间信号。摘要:它们是相互补充的部分,可以组合在一起来创造一些东西。
https://stackoverflow.com/questions/2199148
复制相似问题