在iOS中调度并发队列

时间:2014-02-18 09:06:33

标签: ios cocoa concurrency grand-central-dispatch

我对dispatch_syncdispatch_asyncdispatch_barrier_syncdispatch_barrier_async在并发队列中放在一起时的执行顺序感到困惑(虽然我明白了)这个概念!)。

我的iOS框架中有一个自定义并发队列。因此,如果按以下顺序插入块,例如:

  

CustomConcurrentQueue - >

     
      
  1. dispacth_sync block
  2.   
  3. dispatch_barrier_sync block
  4.   
  5. dispatch_async block
  6.   
  7. dispatch_async_barrier block
  8.   
  9. dispatch_sync_barrier block
  10.   
  11. dispatch_sync block。
  12.   

执行的顺序是什么。有人能清楚地解释一下吗?感谢。

1 个答案:

答案 0 :(得分:1)

我认为他们会按照这个顺序执行(即开始然后完成)。

既然您知道启动顺序,我假设它们都是从同一个队列(可能是主队列?)调用的。

  1. dispatch_sync。运行。在此返回之前,不会启动第2步。
  2. dispatch_barrier_sync。等待任何先前的块完成(但没有)。运行。在此块完成之前,步骤3将不会启动。
  3. dispatch_async。启动。
  4. dispatch_barrier_async。等待步骤3中的阻止完成,然后开始。
  5. dispatch_barrier_sync。等待步骤4中的块完成,然后运行。在此完成之前,步骤6将不会启动。
  6. dispatch_sync。运行。程序仅在返回时继续。