首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wait()和Pulse()之间的区别

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

Stack Overflow用户
提问于 2010-02-04 19:14:26
回答 1查看 326关注 0票数 0

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描述,这意味着当释放锁和阻塞(与等待锁切换相同)时,一辆车通过,然后屏障(锁)就会倒下?

EN

回答 1

Stack Overflow用户

发布于 2010-02-04 19:22:55

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

区别在于:

  • Wait:释放锁,等待脉冲(当然是来自另一个线程),然后重新获取lock.
  • Pulse:释放锁,向另一个等待的线程发出信号,然后重新获取锁。

这中间位:等待与信号是两种方法之间的差异,这种差异启用了安全的线程间信号。摘要:它们是相互补充的部分,可以组合在一起来创造一些东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2199148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档