Object
FIXME: This isn't documented in Nutshell.
Since MonitorMixin#new_cond returns a ConditionVariable, and the example above calls while_wait and signal, this class should be documented.
Wake up all the waiters.
 
               # File monitor.rb, line 148
def broadcast
  @monitor.instance_eval {mon_check_owner()}
  Thread.critical = true
  for t in @waiters
    t.wakeup
  end
  @waiters.clear
  Thread.critical = false
  Thread.pass
end
             
             
               # File monitor.rb, line 159
def count_waiters
  return @waiters.length
end
             
            Wake up and run the next waiter
 
               # File monitor.rb, line 138
def signal
  @monitor.instance_eval {mon_check_owner()}
  Thread.critical = true
  t = @waiters.shift
  t.wakeup if t
  Thread.critical = false
  Thread.pass
end
             
            Create a new timer with the argument timeout, and add the current thread to the list of waiters. Then the thread is stopped. It will be resumed when a corresponding signal occurs.
 
               # File monitor.rb, line 93
def wait(timeout = nil)
  @monitor.instance_eval {mon_check_owner()}
  timer = create_timer(timeout)
  
  Thread.critical = true
  count = @monitor.instance_eval {mon_exit_for_cond()}
  @waiters.push(Thread.current)
  begin
    Thread.stop
    return true
  rescue Timeout
    return false
  ensure
    Thread.critical = true
    begin
      if timer && timer.alive?
        Thread.kill(timer)
      end
      if @waiters.include?(Thread.current)  # interrupted?
        @waiters.delete(Thread.current)
      end
      @monitor.instance_eval {mon_enter_for_cond(count)}
    ensure
      Thread.critical = false
    end
  end
end
             
            call wait until the
supplied block returns true.
 
               # File monitor.rb, line 131
def wait_until
  until yield
    wait
  end
end
             
            call wait while the
supplied block returns true.
 
               # File monitor.rb, line 124
def wait_while
  while yield
    wait
  end
end