2013-05-18 27 views
5

假設我打電話dispatch_async()三次依次是:主中央調度隊列是串行還是併發?

dispatch_async(dispatch_get_main_queue(), 
     ^{ 
      [self doOne]; 
}); 

// some code here 

dispatch_async(dispatch_get_main_queue(), 
     ^{ 
      [self doTwo]; 
}); 

// more code here 

dispatch_async(dispatch_get_main_queue(), 
     ^{ 
      [self doThree]; 
}); 

這會不會總是像

[self doOne][self doTwo]被執行,然後[self doThree],或者訂單有保障?

在這種情況下,問題可能在於主隊列是串行還是併發。

回答

13

從文檔:

dispatch_get_main_queue

返回與應用程序的 主線程相關的串行調度隊列。

所以主隊列是串行隊列,和[self doOne][self doTwo][self doThree]順序的順序執行。

+2

此外,它必須是串行,因爲塊運行在同一個線程上。單個線程不能同時運行多個塊。 – Sven

+1

@Rob是的,但提交給主隊列的塊將在主線程中執行。這是主要隊列的整點。隊列不執行塊,總是發生在某個線程中。通常由GCD管理的專用線程,但是主隊列的主線程。 – Sven

+0

@Sven你誤會了我。我的觀點僅僅是澄清這對於主隊列來說是正確的,不適用於一般隊列。 – Rob

相關問題