class Upfluence::Utils::Semaphore
Public Class Methods
new(size)
click to toggle source
# File lib/upfluence/utils/semaphore.rb, line 4 def initialize(size) @size = size @used = 0 @mutex = Mutex.new @cond = ConditionVariable.new end
Public Instance Methods
acquire(count = 1)
click to toggle source
# File lib/upfluence/utils/semaphore.rb, line 11 def acquire(count = 1) @mutex.synchronize do loop do break if @used + count <= @size @cond.wait(@mutex) end @used += count end end
release(count = 1)
click to toggle source
# File lib/upfluence/utils/semaphore.rb, line 23 def release(count = 1) @mutex.synchronize do @used -= count @cond.broadcast end end
synchronize(count = 1, &block)
click to toggle source
# File lib/upfluence/utils/semaphore.rb, line 30 def synchronize(count = 1, &block) acquire(count) block.call ensure release(count) end