Sha256: 227739b9d0476886d9c0dcf6b9d9372a507a3b2a1cb26c321e3aa2457225a113
Contents?: true
Size: 1.13 KB
Versions: 47
Compression:
Stored size: 1.13 KB
Contents
module Dynflow module Semaphores class Aggregating < Abstract attr_reader :children, :waiting def initialize(children) @children = children @waiting = [] end def wait(thing) if get > 0 true else @waiting << thing false end end def get_waiting @waiting.shift end def has_waiting? !@waiting.empty? end def save @children.values.each(&:save) end def get(n = 1) available = free if n > available drain else @children.values.each { |child| child.get n } n end end def drain available = free @children.values.each { |child| child.get available } available end def free @children.values.map(&:free).reduce { |acc, cur| cur < acc ? cur : acc } end def release(n = 1, key = nil) if key.nil? @children.values.each { |child| child.release n } else @children[key].release n end end end end end
Version data entries
47 entries across 47 versions & 1 rubygems