【问题标题】:Difference between Wait() and Pulse()Wait() 和 Pulse() 的区别
【发布时间】:2010-02-04 11:14:25
【问题描述】:

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

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

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

所以按照 MSDN 的描述,这意味着当释放锁和阻塞时(与等待 - 锁切换相同),一辆车通过,然后障碍(锁)下来?

【问题讨论】:

    标签: c#


    【解决方案1】:

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

    区别在于:

    • Wait:释放锁,等待一个脉冲(当然来自另一个线程),然后重新获取锁。
    • Pulse:释放锁,通知另一个线程等待,然后重新获取锁。

    正是中间位:wait verses signal 是这两种方法之间的区别,并且该区别启用了安全的线程间信号。摘要:它们是互补的部分,可以组合在一起创造出一些东西。

    【讨论】:

      猜你喜欢
      • 2016-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      • 2013-03-18
      • 2018-06-29
      相关资源
      最近更新 更多