Sha256: 10e19ccc5d252623fc3b2f17ced1c5398b468af0c3d6c02155a0c5da0e649f8c
Contents?: true
Size: 1.49 KB
Versions: 4
Compression:
Stored size: 1.49 KB
Contents
# = pool.rb # # == Copyright (c) 2004 George Moschovitis # # Ruby License # # This module is free software. You may use, modify, and/or redistribute this # software under the same terms as Ruby. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # FOR A PARTICULAR PURPOSE. # # == Author(s) # # * George Moschovitis # # == Developer Notes # # TODO Could use the SizedQueue/Queue ? # Author:: George Moschovitis # Copyright:: Copyright (c) 2004 George Moschovitis # License:: Ruby License require 'thread' require 'monitor' # = Pool # # Generalized object pool implementation. Implemented as a thread # safe stack. Exclusive locking is needed both for push and pop. class Pool < Array include MonitorMixin def initialize super @cv = new_cond() end # Add, restore an object to the pool. def push(obj) synchronize do super @cv.signal() end end # Obtain an object from the pool. def pop synchronize do @cv.wait_while { empty? } super end end # Obtains an object, passes it to a block for processing # and restores it to the pool. def obtain result = nil begin obj = pop() result = yield(obj) ensure push(obj) end return result end end # _____ _ # |_ _|__ ___| |_ # | |/ _ \/ __| __| # | | __/\__ \ |_ # |_|\___||___/\__| # # TODO =begin #testing =end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
facets-1.8.20 | lib/facets/more/pool.rb |
facets-1.8.49 | lib/facets/more/pool.rb |
facets-1.8.51 | lib/facets/more/pool.rb |
facets-1.8.54 | lib/facets/more/pool.rb |