首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MonitorMixin::ConditionVariable

Parent:Object

FIXME:这在Nutshell中没有记录。

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

公共类方法

new(monitor) Show source

代码语言:javascript
复制
# File lib/monitor.rb, line 153
def initialize(monitor)
  @monitor = monitor
  @cond = Thread::ConditionVariable.new
end

公共实例方法

broadcast() Show source

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

代码语言:javascript
复制
# File lib/monitor.rb, line 146
def broadcast
  @monitor.__send__(:mon_check_owner)
  @cond.broadcast
end

signal() Show source

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

代码语言:javascript
复制
# File lib/monitor.rb, line 138
def signal
  @monitor.__send__(:mon_check_owner)
  @cond.signal
end

wait(timeout = nil) Show source

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

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

代码语言:javascript
复制
# 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

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

代码语言:javascript
复制
# File lib/monitor.rb, line 129
def wait_until
  until yield
    wait
  end
end

wait_while() Show source

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

代码语言:javascript
复制
# File lib/monitor.rb, line 120
def wait_while
  while yield
    wait
  end
end

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com