Wait()和Pulse()之间的区别

时间:2010-02-04 11:14:26

标签: c#

MSDN(http://msdn.microsoft.com/en-us/library/aa332339(VS.71).aspx)表示等待“释放对象上的锁并阻止当前线程,直到它重新获取锁定为止。”这意味着基本上锁定切换(释放,让另一个线程有机会运行,重新获取锁定)。但这不是Pulse()的作用吗?与脉冲唯一的微小区别是它永久性地发出信号来获取锁定?

C#线程指南(http://www.albahari.com/threading/part4.aspx#_Wait_and_Pulse)有一个非常好的类比:

“把它想象成一个自动停车场:你先在收费站排队验证你的车票(等候队列);”

因此,使用MSDN描述,这意味着当释放锁定和阻塞(与等待 - 锁定切换相同)时,一辆车通过,然后屏障(锁定)关闭?

1 个答案:

答案 0 :(得分:1)

Monitor.WaitMonitor.Pulse是关于支持在.NET中的任何引用对象上创建条件变量的特定模式。在特定模式之外,它们是无用的(或者至少我还没有看到任何这样的用途)。

区别在于:

  • Wait:释放锁定,等待脉冲(当然是从另一个线程),然后重新获取锁定。
  • Pulse:释放锁定,指示另一个线程等待,然后重新获取锁定。

正是中间位:等待两个方法之间差异的信号,这种差异可以实现安全的线程间信号。总结:它们是相辅相成的部分,可以创造出一些东西。