Ruby 2.4

MonitorMixin::ConditionVariable

class MonitorMixin::ConditionVariable

Parent:Object

FIXME:这在Nutshell中没有记录。

由于MonitorMixin#new_cond返回一个ConditionVariable,上面的例子调用while_wait和signal,所以这个类应该被记录下来。

公共类方法

new(monitor) Show source

# File lib/monitor.rb, line 153 def initialize(monitor) @monitor = monitor @cond = Thread::ConditionVariable.new end

公共实例方法

broadcast() Show source

唤醒等待这个锁的所有线程。

# File lib/monitor.rb, line 146 def broadcast @monitor.__send__(:mon_check_owner) @cond.broadcast end

signal() Show source

唤醒第一个线程等待这个锁。

# File lib/monitor.rb, line 138 def signal @monitor.__send__(:mon_check_owner) @cond.signal end

wait(timeout = nil) Show source

释放关联监视器中的锁并等待; 重新获得唤醒时的锁定。

如果timeout给出,timeout即使没有其他线程不发送信号,该方法在秒数后返回。

# File lib/monitor.rb, line 106 def wait(timeout = nil) @monitor.__send__(:mon_check_owner) count = @monitor.__send__(:mon_exit_for_cond) begin @cond.wait(@monitor.instance_variable_get(:@mon_mutex), timeout) return true ensure @monitor.__send__(:mon_enter_for_cond, count) end end

wait_until() Show source

调用等待,直到给定的块产生真值。

# File lib/monitor.rb, line 129 def wait_until until yield wait end end

wait_while() Show source

呼叫等待重复,而给定的块产生真值。

# File lib/monitor.rb, line 120 def wait_while while yield wait end end