2014-02-18 78 views
0

當他們被放在一個併發隊列中時(雖然我理解了這個概念!),我對dispatch_sync,dispatch_async,dispatch_barrier_syncdispatch_barrier_async的執行順序有點困惑。在iOS中調度併發隊列

我在我的iOS框架中有一個自定義的併發隊列。因此,如果塊被插入以下列順序,如:

CustomConcurrentQueue - >

  1. dispacth_sync塊
  2. dispatch_barrier_sync方框
  3. dispatch_async方框
  4. dispatch_async_barrier塊
  5. dispatch_sync_barrier塊
  6. 迪帕tch_sync塊。

什麼是執行順序。任何人都可以解釋清楚嗎?謝謝。

+0

當您有兩個塊異步調度(無障礙)到併發隊列時,它們的完成順序不能保證(顯然是因爲它們併發運行)。但是,在列出的所有場景中,通過一種機制或另一種機制阻止併發執行(通過使用障礙,同步調度或兩者兼而有之),因此這六個調度任務將按照您調度的順序運行。 – Rob

回答

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。運行。程序僅在此返回時繼續。
+0

它不是主隊列......它是一個自定義併發隊列。 – Karthik207

+0

我的意思是當你打這些電話時你正在打的隊列。我知道每個都被分派到您的自定義併發隊列中。 – stefandouganhyde

+0

你使這些調用的隊列是串行的還是併發的,它們的執行順序無關緊要。 – Mojo66