Sha256: ab15ad0e0f318e2b98b75b0ef931767c6e9e29069da558283e8d1b646938d25d
Contents?: true
Size: 1.15 KB
Versions: 2
Compression:
Stored size: 1.15 KB
Contents
# frozen_string_literal: true 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
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
dynflow-1.9.0 | lib/dynflow/semaphores/aggregating.rb |
dynflow-1.8.3 | lib/dynflow/semaphores/aggregating.rb |