class Bunny::Concurrent::Condition
Akin to java.util.concurrent.Condition and intrinsic object monitors (Object#wait, Object#notify, Object#notifyAll) in Java: threads can wait (block until notified) on a condition other threads notify them about. Unlike the j.u.c. version, this one has a single waiting set.
Conditions can optionally be annotated with a description string for ease of debugging. @private
Attributes
Public Class Methods
Source
# File lib/bunny/concurrent/condition.rb, line 19 def initialize(description = nil) @mutex = Monitor.new @waiting_threads = [] @description = description end
Public Instance Methods
Source
# File lib/bunny/concurrent/condition.rb, line 59 def any_threads_waiting? @mutex.synchronize { !@waiting_threads.empty? } end
Source
# File lib/bunny/concurrent/condition.rb, line 63 def none_threads_waiting? @mutex.synchronize { @waiting_threads.empty? } end
Source
# File lib/bunny/concurrent/condition.rb, line 34 def notify @mutex.synchronize do t = @waiting_threads.shift begin t.run if t rescue ThreadError retry end end end
Source
# File lib/bunny/concurrent/condition.rb, line 45 def notify_all @mutex.synchronize do @waiting_threads.each do |t| t.run end @waiting_threads.clear end end
Source
# File lib/bunny/concurrent/condition.rb, line 25 def wait @mutex.synchronize do t = Thread.current @waiting_threads.push(t) end Thread.stop end
Source
# File lib/bunny/concurrent/condition.rb, line 55 def waiting_set_size @mutex.synchronize { @waiting_threads.size } end