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