类 MonitorMixin::ConditionVariable
FIXME: 此处未在 Nutshell 中记录。
由于 MonitorMixin.new_cond
返回一个 ConditionVariable
,并且上面的示例调用了 while_wait 和 signal,因此应该记录此类。
公共类方法
new(monitor) 点击切换源代码
# File ext/monitor/lib/monitor.rb, line 146 def initialize(monitor) @monitor = monitor @cond = Thread::ConditionVariable.new end
公共实例方法
broadcast() 点击切换源代码
唤醒所有等待此锁的线程。
# File ext/monitor/lib/monitor.rb, line 139 def broadcast @monitor.mon_check_owner @cond.broadcast end
signal() 点击切换源代码
唤醒等待此锁的队列中的第一个线程。
# File ext/monitor/lib/monitor.rb, line 131 def signal @monitor.mon_check_owner @cond.signal end
wait(timeout = nil) 点击切换源代码
释放关联监视器中持有的锁并等待;在唤醒时重新获取锁。
如果给出了 timeout
,则此方法在 timeout
秒后返回,即使没有其他线程发出信号。
# File ext/monitor/lib/monitor.rb, line 105 def wait(timeout = nil) @monitor.mon_check_owner @monitor.wait_for_cond(@cond, timeout) end
wait_until() 点击切换源代码
重复调用 wait,直到给定的块产生一个真值。
# File ext/monitor/lib/monitor.rb, line 122 def wait_until until yield wait end end
wait_while() 点击切换源代码
重复调用 wait,只要给定的块产生一个真值。
# File ext/monitor/lib/monitor.rb, line 113 def wait_while while yield wait end end