Когда я отправить два блока в последовательной очереди на dispatch_async, это обеспечить второй работает после первого:
Отправляет ли блок dispatch_async в последовательную очередь?
- dispatch_async (serial_queue, б1);
- 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 == СЧЕТЧИК всегда? Благодаря
Ужасно, поэтому, если мы хотим FIFO, мы можем просто использовать 'dispatch_create_queue' и установить приоритет с помощью' dispatch_set_target_queue' [в соответствии с этим ответом] (http://stackoverflow.com/a/9965389/72176) :) –
Да, хотя я не уверен, что вам нужно dispatch_set_target_queue. Я редко вижу случай, когда разработчик имеет право * увеличить * приоритет. –
Я использовал его для _decrease_ приоритета до самого низкого уровня. Я обрабатывал фотографии, используя очередь, созданную с помощью 'dispatch_create_queue', и, похоже, она помогала (пользовательский интерфейс был более отзывчивым). –