Module: ObjectPool::InstanceMethods

Defined in:
lib/objectpool.rb

Instance Method Summary collapse

Instance Method Details

#busy?Boolean

Returns:

  • (Boolean)


51
52
53
# File 'lib/objectpool.rb', line 51

def busy?
  @__op__mx.synchronize { @__op__queue.size < @__op__workers.list.size }
end

#closeObject



55
56
57
58
# File 'lib/objectpool.rb', line 55

def close
  @__op__workers.list.each {|worker| worker.raise(StopWorker)}
  @__op__workers = ThreadGroup.new
end

#initialize(*args, &block) ⇒ Object



28
29
30
31
32
33
34
35
36
37
# File 'lib/objectpool.rb', line 28

def initialize(*args, &block)
  @__op__mx      = Mutex.new
  @__op__cv      = ConditionVariable.new
  @__op__queue   = Queue.new
  @__op__workers = ThreadGroup.new
  
  self.class.pool_size.times do
    __op__create_worker(*args, &block)
  end
end

#joinObject



39
40
41
# File 'lib/objectpool.rb', line 39

def join
  sleep 0.01 until @__op__workers.list.all? {|w| !w.alive?}
end

#sizeObject



47
48
49
# File 'lib/objectpool.rb', line 47

def size
  @__op__workers.list.size
end

#waitObject



43
44
45
# File 'lib/objectpool.rb', line 43

def wait
  sleep 0.01 until @__op__mx.synchronize { @__op__queue.empty? && @__op__workers.list.all? {|w| !w.busy?} }
end