2016-02-03 99 views

回答

2

第二個參數指定您想要的隊列類型:串行或併發。

如果您要求提供一個串行隊列,則提交給隊列的塊將按照它們提交的順序執行,每次一個。

如果您要求併發隊列,則塊可能(或不可能)在隊列中的不同線程上同時執行。

您會在定義中看到NULL表示串行。下面是從queue.h定義:

/*! 
* @typedef dispatch_queue_attr_t 
* 
* @abstract 
* Attribute for dispatch queues. 
*/ 
DISPATCH_DECL(dispatch_queue_attr); 

/*! 
* @const DISPATCH_QUEUE_SERIAL 
* @discussion A dispatch queue that invokes blocks serially in FIFO order. 
*/ 
#define DISPATCH_QUEUE_SERIAL NULL 

/*! 
* @const DISPATCH_QUEUE_CONCURRENT 
* @discussion A dispatch queue that may invoke blocks concurrently and supports 
* barrier blocks submitted with the dispatch barrier API. 
*/ 
#define DISPATCH_QUEUE_CONCURRENT \ 
     DISPATCH_GLOBAL_OBJECT(dispatch_queue_attr_t, \ 
     _dispatch_queue_attr_concurrent) 
__OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_4_3) 
DISPATCH_EXPORT 
struct dispatch_queue_attr_s _dispatch_queue_attr_concurrent; 

所以,你想傳遞什麼很大程度上取決於你在做什麼,以及是否你在做什麼是並行的。

+0

所以,如果我想讓它平行,它會是dispatch_queue_create(com.something.myqueue,dispatch_queue_attr_concurrent)?那是對的嗎?我正在努力研究爲並行隊列傳遞什麼。 –

+0

是的。並行是並行的一般同義詞。考慮到GCD會根據系統資源等來管理隊列,所以傳遞併發並不能保證並行性。 [這](https://mikeash.com/pyblog/friday-qa-2009-09-25-gcd-practicum.html)可能是一些很好的閱讀,以幫助理解GCD的工作原理。 –