Module: DispatchQueue::Dispatch

Defined in:
lib/dispatch_queue_rb/dispatch.rb

Defined Under Namespace

Classes: Result

Class Method Summary collapse

Class Method Details

.concurrent_map(input_array, target_queue: nil, &task) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/dispatch_queue_rb/dispatch.rb', line 43

def concurrent_map( input_array, target_queue:nil, &task )
  group = DispatchGroup.new
  target_queue ||= default_queue

  output_results = input_array.map do |e|
    result = Result.new
    target_queue.dispatch_async( group:group ) do
      result.value = task.call( e )
    end
    result
  end

  group.wait()
  output_results.map { |result| result.value }
end

.default_queueObject



20
21
22
# File 'lib/dispatch_queue_rb/dispatch.rb', line 20

def default_queue
  @@default_queue
end

.main_queueObject



24
25
26
# File 'lib/dispatch_queue_rb/dispatch.rb', line 24

def main_queue
  @@main_queue
end

.ncpuObject



16
17
18
# File 'lib/dispatch_queue_rb/dispatch.rb', line 16

def ncpu()
  @@ncpu ||= `sysctl -n hw.ncpu`.to_i rescue 1
end

.synchronizeObject



28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/dispatch_queue_rb/dispatch.rb', line 28

def synchronize()
  mutex, condition = ConditionVariablePool.acquire()
  result = nil
  result_handler = Proc.new { |r|
    result = r;
    mutex.synchronize { condition.signal() }
  }
  mutex.synchronize do
    yield result_handler
    condition.wait( mutex )
  end
  ConditionVariablePool.release( mutex, condition )
  result
end