- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
Monitor.PulseAll
通知队列中的所有等待线程。
Monitor.Pulse
通知等待队列中的一个线程。 (下一个等待线程)
只有下一个线程(一个线程)才能获取锁。那有什么区别呢?
什么时候应该使用 Pulse
与 PulseAll
?
最佳答案
当您想要唤醒多个线程时,请使用PulseAll
,因为它们正在等待的条件现在可能已被多个线程满足。 (等待几乎总是与条件相关联 - 您通常应该在 while
循环中测试该条件。)
当您只想唤醒一个线程时使用Pulse
,因为实际上只有一个线程能够完成有用的工作。
打两个比方:
假设您只有一台打印机。一次只有一个人可以使用它,所以如果有很多人在等,你可以让他们全部进入休眠状态——但是当打印机空闲时你只会叫醒一个人。这反射(reflect)了 Pulse
的使用。
现在假设您经营一家商店。当你关门时,顾客在店外等候。当您开店时,您不只是想叫醒一位顾客——他们现在都可以进来了。这反射(reflect)了 PulseAll
的使用。
关于c# - Monitor.Pulse 和 Monitor.PulseAll 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/675352/
我正在为我们正在运行的 ASP.NET 应用程序编写我们自己的记录器。在当前的代码库中,我们似乎遇到了线程问题,我正在尝试逐个组件地消除以找出导致此问题的原因。症状是应用程序启动后网络服务器上的 CP
任何人都可以用简单的例子来解释我如何处理 Monitor.PulseAll()。我已经从这个 stackoverflow 中找到了一些例子。因为我是初学者,我觉得这些超出了我的理解范围。 最佳答案 怎
我有一种情况,有时休眠线程不会被 Monitor.PulseAll(object lock) 命令唤醒。这种现象不是确定性的。通常它可以工作,但有时在调试期间,休眠线程无法唤醒并且我的队列不断填满
我很难理解 Wait()、Pulse()、PulseAll()。他们都能避免僵局吗?如果您解释一下如何使用它们,我将不胜感激? 最佳答案 简短版: lock(obj) {...} 是 Monitor.
Delphi Docwiki 解释说 Pulse通知等待队列中的下一个线程,一旦调用线程释放该对象,它将能够锁定指定的对象。 PulseAll向等待队列中的所有线程发出信号。 我found这段代码在线
在有多个“请求线程”和一个哑“工作线程”的情况下,请求线程必须排队。 考虑两种可能性: 每个请求线程在其自己的专用 对象上调用 Monitor.Wait,该对象进入 FIFO 队列。当结果到达时,最旧
我是 CSharp 和线程的新手。 为了熟悉Monitor.Wait、Monitor.lock和Monitor.PulseAll,我构建了一个场景描述如下。 “一个 FootballGround 由不
Monitor.PulseAll 通知队列中的所有等待线程。 Monitor.Pulse 通知等待队列中的一个线程。 (下一个等待线程) 只有下一个线程(一个线程)才能获取锁。那有什么区别呢? 什么时
是否有 .Net 类可以执行 ManualResetEvent.PulseAll() 会执行的操作(如果存在)? 我需要自动释放一组等待同一信号的线程。 (对于我的预期用途,我并不担心“线程踩踏”。)
在使用 Monitor.PulseAll() 进行线程同步的库中,我注意到从调用 PulseAll(...) 到线程被唤醒的延迟似乎遵循“阶梯”分布 - - 步幅极大。被唤醒的线程几乎没有做任何工作;
我是一名优秀的程序员,十分优秀!