Sha256: d3aded7fb6e4e2024393cd32f352b9ad72360dce6350da15899c400f2e97f255
Contents?: true
Size: 1.57 KB
Versions: 1
Compression:
Stored size: 1.57 KB
Contents
#-- # Pool # # Copyright (c) 2004-2005 Navel, all rights reserved. # # 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. # # ========================================================================== # Revision History :: # -------------------------------------------------------------------------- # 05.04.11 Trans * Ported to Mega Modules. # ========================================================================== # # :INVESTIGATE: Could use the SizedQueue/Queue. # #++ #:title: Pool # # Generalized object pool implementation. Implemented as a thread # safe stack. Exclusive locking is needed both for push and pop. # # == Usage # # TODO # # == Author(s) # # * George Moschovitis <gm@navel.gr> # require 'thread' require 'monitor' 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
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
mega-0.3.1 | lib/mega/pool.rb |