MonitorMixin::ConditionVariable (Class)

In: monitor.rb
Parent: 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.

Methods

Classes and Modules

Class MonitorMixin::ConditionVariable::Timeout

Public Class methods

[Source]

# File monitor.rb, line 153
    def initialize(monitor)
      @monitor = monitor
      @waiters = []
    end

Public Instance methods

[Source]

# File monitor.rb, line 136
    def broadcast
      @monitor.__send__(:mon_check_owner)
      Thread.critical = true
      for t in @waiters
        t.wakeup
      end
      @waiters.clear
      Thread.critical = false
      Thread.pass
    end

[Source]

# File monitor.rb, line 147
    def count_waiters
      return @waiters.length
    end

[Source]

# File monitor.rb, line 127
    def signal
      @monitor.__send__(:mon_check_owner)
      Thread.critical = true
      t = @waiters.shift
      t.wakeup if t
      Thread.critical = false
      Thread.pass
    end

[Source]

# File monitor.rb, line 89
    def wait(timeout = nil)
      @monitor.__send__(:mon_check_owner)
      timer = create_timer(timeout)
      
      Thread.critical = true
      count = @monitor.__send__(:mon_exit_for_cond)
      @waiters.push(Thread.current)

      begin
        Thread.stop
        return true
      rescue Timeout
        return false
      ensure
        Thread.critical = true
        if timer && timer.alive?
          Thread.kill(timer)
        end
        if @waiters.include?(Thread.current)  # interrupted?

          @waiters.delete(Thread.current)
        end
        @monitor.__send__(:mon_enter_for_cond, count)
        Thread.critical = false
      end
    end

[Source]

# File monitor.rb, line 121
    def wait_until
      until yield
        wait
      end
    end

[Source]

# File monitor.rb, line 115
    def wait_while
      while yield
        wait
      end
    end

[Validate]