Module: DispatchQueue::DispatchSyncImpl

Included in:
ConcurrentQueue, SerialQueue, ThreadPoolQueue, ThreadQueue
Defined in:
lib/dispatch_queue_rb/mixins/dispatch_sync_impl.rb

Instance Method Summary collapse

Instance Method Details

#dispatch_barrier_sync(group: nil, &task) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/dispatch_queue_rb/mixins/dispatch_sync_impl.rb', line 27

def dispatch_barrier_sync( group:nil, &task )
  mutex, condition = ConditionVariablePool.acquire()
  result = nil
  mutex.synchronize do
    dispatch_barrier_async( group:group ) do
      result = task.call()
      mutex.synchronize { condition.signal() }
    end
    condition.wait( mutex )
  end
  ConditionVariablePool.release( mutex, condition )
  result
end

#dispatch_sync(group: nil, &task) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/dispatch_queue_rb/mixins/dispatch_sync_impl.rb', line 13

def dispatch_sync( group:nil, &task )
  mutex, condition = ConditionVariablePool.acquire()
  result = nil
  mutex.synchronize do
    dispatch_async( group:group ) do
      result = task.call()
      mutex.synchronize { condition.signal() }
    end
    condition.wait( mutex )
  end
  ConditionVariablePool.release( mutex, condition )
  result
end