C# Wait()和Pulse()之间的差异

C# Wait()和Pulse()之间的差异,c#,C#,MSDN()说wait“释放对象上的锁并阻止当前线程,直到它重新获得锁。”这基本上意味着锁切换(释放,给另一个线程运行的机会,重新获得锁)。但这不是Pulse()的功能吗?与脉冲唯一的细微区别是,它始终是获取锁的信号 C#threading guide()有一个很好的类比: “把它想象成一个自动停车场:你先在付款站排队验证你的车票(排队等候) 因此,根据MSDN的描述,这意味着当释放锁和阻塞(与等待-锁切换相同)时,一辆车穿过障碍物(锁)下拉?Monitor.Wait和Monitor.Pulse

MSDN()说wait“释放对象上的锁并阻止当前线程,直到它重新获得锁。”这基本上意味着锁切换(释放,给另一个线程运行的机会,重新获得锁)。但这不是Pulse()的功能吗?与脉冲唯一的细微区别是,它始终是获取锁的信号

C#threading guide()有一个很好的类比:

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


因此,根据MSDN的描述,这意味着当释放锁和阻塞(与等待-锁切换相同)时,一辆车穿过障碍物(锁)下拉?

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

区别在于:

  • Wait
    :释放锁,等待脉冲(当然是来自另一个线程),然后重新获取锁
  • Pulse
    :释放锁,向另一个正在等待的线程发出信号,然后重新获取锁
正是中间的那个位:wait与signal是这两种方法之间的区别,这个区别使线程间的信号变得安全。小结:它们是相互补充的部分,结合在一起可以创造一些东西