если мы используем подход GCD для итерации, как разбить/остановить цикл после согласования условия?Как разбить петлю, если мы используем dispatch_apply?
queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_apply(count, queue, ^(size_t i) {
printf("%u\n", i);
//doing thread safe(also heavy) operation here
if (condition) {
//exit the loop
}
});
'dispatch_apply' не поддерживает возможности пораньше. Он не будет возвращаться до тех пор, пока все вызовы 'count' не будут завершены. Обновите свой вопрос тем, что вы пытаетесь сделать, чтобы предложить альтернативные решения. – rmaddy
Спасибо за комментарий @rmaddy. Я хочу выполнить потокобезопасную операцию внутри цикла, и как только мое условие будет удовлетворено, я хочу выйти из цикла. Я обновил свой вопрос. –
Почему вы думаете, что 'dispatch_apply' сделает вашу операцию безопасной? Тот факт, что вы хотите прекратить раннее, предполагает, что любая форма параллельного выполнения, вероятно, не подходит в любом случае. – Paulw11