當我提交兩個塊成串行隊列由dispatch_async,它保證第二個運行的第一個後:
dispatch_async塊到串行隊列是否保持秩序?
- dispatch_async(serial_queue,B1);
- dispatch_async(serial_queue,b2);
我們可以保證b1在b2之前運行嗎?
下面是完整的源代碼段:
#define COUNTER 10000
m_value = 0;
dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_queue_t queue = dispatch_queue_create("myqueue", NULL);
dispatch_group_t group = dispatch_group_create();
for (int i = 0; i < COUNTER; ++i) {
dispatch_group_async(group, globalQueue, ^() {
dispatch_async(queue, ^() {
++m_value;
});
});
}
dispatch_group_notify(group, queue, ^() {
NSLog(@"m_value Actual: %d Expected: %d", m_value, COUNTER);
});
dispatch_release(queue);
dispatch_release(group);
queue = nil;
group = nil;
return YES;
我們可以保證m_value == COUNTER始終?感謝
太棒了,所以如果我們想要FIFO,我們可以簡單地使用'dispatch_create_queue',並用'dispatch_set_target_queue'設置優先級[按照這個答案](http://stackoverflow.com/a/9965389/72176):) –
是的,雖然我不確定你需要dispatch_set_target_queue。我很少看到開發人員爲了增加優先級而正確的情況。 –
我用它來降低最低級別的優先級。我正在使用用'dispatch_create_queue'創建的隊列處理照片,並且它似乎有所幫助(UI更具響應性)。 –