class MonitorMixin::ConditionVariable

FIXME: Nutshell 中没有对此进行文档说明。

由于 MonitorMixin.new_cond 返回一个 ConditionVariable,并且上面的示例调用了 while_wait 和 signal,因此应该对这个类进行文档说明。

公共实例方法

broadcast() 点击切换源代码

唤醒所有等待此锁的线程。

# File monitor/lib/monitor.rb, line 139
def broadcast
  @monitor.mon_check_owner
  @cond.broadcast
end
signal() 点击切换源代码

唤醒等待此锁的队列中的第一个线程。

# File monitor/lib/monitor.rb, line 131
def signal
  @monitor.mon_check_owner
  @cond.signal
end
wait(timeout = nil) 点击切换源代码

释放关联监视器中持有的锁并等待;在唤醒时重新获取锁。

如果给定了 timeout,即使没有其他线程发出信号,此方法也会在 timeout 秒过后返回。

# File 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 monitor/lib/monitor.rb, line 122
def wait_until
  until yield
    wait
  end
end
wait_while() 点击切换源代码

当给定的代码块产生真值时,重复调用 wait。

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