当我通过dispatch_async将两个块提交到一个串行队列时,是否确保第二个块在第一个块之后运行:
我们可以保证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吗?感谢
答案 0 :(得分:3)
提交到并发队列的块可以同时执行,但是从Apple文档“提交到串行队列的块按FIFO顺序一次执行一个”。主队列是串行的,就像使用dispatch_create_queue创建的任何队列一样。
答案 1 :(得分:0)
根据documentation块(在全局队列上)可以同时执行
“提交给这些全局并发队列的块可以相互执行。”