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