class PerfectQueue::BlockingFlag
Public Class Methods
new()
click to toggle source
# File lib/perfectqueue/blocking_flag.rb, line 22 def initialize @set = false @mutex = Mutex.new @cond = ConditionVariable.new end
Public Instance Methods
reset!()
click to toggle source
# File lib/perfectqueue/blocking_flag.rb, line 40 def reset! toggled = false @mutex.synchronize do if @set @set = false toggled = true end @cond.broadcast end return toggled end
reset_region(&block)
click to toggle source
# File lib/perfectqueue/blocking_flag.rb, line 65 def reset_region(&block) reset! begin block.call ensure set! end end
set!()
click to toggle source
# File lib/perfectqueue/blocking_flag.rb, line 28 def set! toggled = false @mutex.synchronize do unless @set @set = true toggled = true end @cond.broadcast end return toggled end
set?()
click to toggle source
# File lib/perfectqueue/blocking_flag.rb, line 52 def set? @set end
set_region(&block)
click to toggle source
# File lib/perfectqueue/blocking_flag.rb, line 56 def set_region(&block) set! begin block.call ensure reset! end end
wait(timeout=nil)
click to toggle source
# File lib/perfectqueue/blocking_flag.rb, line 74 def wait(timeout=nil) @mutex.synchronize do @cond.wait(@mutex, timeout) end self end