я узнал немного о GCD барьерах и хотели изучить эту информацию (от Apple docs):Новые задачи не ждут GCD барьеры
Любых блоков, представленных после барьерного блока не не выполняются до тех пор, барьерный блок завершается.
К этому коду:
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
for (int i = 0; i < 500, i++) {
dispatch_async(queue, ^{
NSLog("%d", i);
}
if ((i % 50) == 0) {
dispatch_barrier_async(queue, ^{
for (int j = 0; j < 5; j++) {
[NSThread sleepForTimeInterval:1];
NSLog(@"Barrier!");
}
});
}
}
Я ожидал, что каждый пятидесятый граф, очередь будет остановлен в течение 5 секунд, но это не так. Вместо этого барьеры выполняются параллельно с другими задачами, и все задачи, несмотря на барьеры, выполняются немедленно. Являются ли документы неправильными или я неправильно понимаю что-то? Заранее спасибо
Что произойдет, если вы создаете свою очередь с помощью: 'очереди = dispatch_queue_create ("SomeName", DISPATCH_QUEUE_CONCURRENT);' ? – rmaddy