Определите, какой вывод получит программа №34

Строки двух задач могут перемешиваться. Внутри каждой задачи индексы идут от 0 до 99, а sync блокирует вызывающий поток до окончания только Task 2.

Короткий ответ

Что ответить на собеседовании

Строки двух задач могут перемешиваться. Внутри каждой задачи индексы идут от 0 до 99, а sync блокирует вызывающий поток до окончания только Task 2.

Подробный разбор

Ответ с пояснениями

Условие

В этом Swift‑примерe создаётся конкурентная очередь и в неё помещаются две задачи: первая запускается асинхронно, вторая – синхронно. Нужно предсказать, какие строки будут напечатаны и в каком порядке.

import Foundation

let workQueue = DispatchQueue(label: "com.example.concurrent", attributes: .concurrent)

workQueue.async {
    for index in 0..<100 {
        print("Task 1 - \(index)")
    }
}

workQueue.sync {
    for index in 0..<100 {
        print("Task 2 - \(index)")
    }
}

Ответ

Строки двух задач могут перемешиваться. Внутри каждой задачи индексы идут от 0 до 99, а sync блокирует вызывающий поток до окончания только Task 2.

Concurrent queue допускает одновременное выполнение блоков, поэтому async перед sync не означает, что Task 1 обязательно полностью закончится первой. Каждая задача сохраняет собственный порядок печати. После возврата из workQueue.sync Task 1 ещё может работать; для ожидания обеих нужен отдельный механизм завершения. В короткой консольной программе также надо обеспечить, чтобы процесс не завершился раньше оставшейся async-работы. Одна точная общая последовательность условием не гарантируется.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее