blob: 082cf4a2fd6bcd6b0770d23319fc10a5e15ad4ba (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
require 'thread'
module SupplyDrop
class ThreadPool
def initialize(size)
@size = size
@jobs = Queue.new
@retvals = []
@pool = Array.new(@size) do |i|
Thread.new do
Thread.current[:id] = i
catch(:exit) do
loop do
job, args = @jobs.pop
@retvals << job.call(*args)
end
end
end
end
end
def schedule(*args, &block)
@jobs << [block, args]
end
def shutdown
@size.times do
schedule { throw :exit }
end
@pool.map(&:join)
@retvals
end
end
end
|