Class: MonitorMixin::ConditionVariable

Inherits:
Object
  • Object
show all
Defined in:
lib/monitor.rb

Overview

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.

Defined Under Namespace

Classes: Timeout

Instance Method Summary collapse

Instance Method Details

#broadcastObject

Wakes up all threads waiting for this lock.



147
148
149
150
# File 'lib/monitor.rb', line 147

def broadcast
  @monitor.__send__(:mon_check_owner)
  @cond.broadcast
end

#signalObject

Wakes up the first thread in line waiting for this lock.



139
140
141
142
# File 'lib/monitor.rb', line 139

def signal
  @monitor.__send__(:mon_check_owner)
  @cond.signal
end

#wait(timeout = nil) ⇒ Object

Releases the lock held in the associated monitor and waits; reacquires the lock on wakeup.

If timeout is given, this method returns after timeout seconds passed, even if no other thread doesn’t signal.



107
108
109
110
111
112
113
114
115
116
# File 'lib/monitor.rb', line 107

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_untilObject

Calls wait repeatedly until the given block yields a truthy value.



130
131
132
133
134
# File 'lib/monitor.rb', line 130

def wait_until
  until yield
    wait
  end
end

#wait_whileObject

Calls wait repeatedly while the given block yields a truthy value.



121
122
123
124
125
# File 'lib/monitor.rb', line 121

def wait_while
  while yield
    wait
  end
end