类 MonitorMixin::ConditionVariable

待办事项:此类在简明介绍中未记录。

由于 MonitorMixin.new_cond 返回一个 ConditionVariable,并且上面的示例调用了 while_wait 和 signal,因此此类应该记录。

公共类方法

new(monitor) 点击切换源代码
# File monitor/lib/monitor.rb, line 146
def initialize(monitor)
  @monitor = monitor
  @cond = Thread::ConditionVariable.new
end

公共实例方法

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