Sha256: 07ad8df49d816c0758d2ab2132d4b13ff34d2f4313919ca765c282db20a6acdf
Contents?: true
Size: 907 Bytes
Versions: 6
Compression:
Stored size: 907 Bytes
Contents
# * George Moschovitis <gm@navel.gr> # (c) 2004-2005 Navel, all rights reserved. # $Id: pool.rb 1 2005-04-11 11:04:30Z gmosx $ require 'thread' require 'monitor' module Glue # Generalized object pool implementation. Implemented as a thread # safe stack. Exclusive locking is needed both for push and pop. # # INVESTIGATE: Could use the SizedQueue/Queue. 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 end
Version data entries
6 entries across 6 versions & 1 rubygems
Version | Path |
---|---|
glue-0.17.0 | lib/glue/pool.rb |
glue-0.18.0 | lib/glue/pool.rb |
glue-0.16.0 | lib/glue/pool.rb |
glue-0.18.1 | lib/glue/pool.rb |
glue-0.19.0 | lib/glue/pool.rb |
glue-0.20.0 | lib/glue/pool.rb |