Вопрос проверяет знание продвинутых механизмов синхронизации в GCD.
DispatchGroup: Позволяет ждать завершения группы задач.
DispatchBarrier: Обеспечивает эксклюзивный доступ к ресурсу в concurrent очереди.
1. DispatchGroup:
Полезен для ожидания завершения нескольких асинхронных задач.
Пример:
let group = DispatchGroup()
group.enter()
someAsyncTask { group.leave() }
group.notify(queue: .main) { print("Все задачи завершены") }2. DispatchBarrier:
Блокирует concurrent очередь для эксклюзивного доступа.
Пример:
let queue = DispatchQueue(label: "com.example.concurrent", attributes: .concurrent)
queue.async(flags: .barrier) {
// Этот блок выполнится один, без параллельных задач
}Где применяются:
DispatchGroup: Загрузка нескольких изображений перед обновлением UI.
DispatchBarrier: Чтение/запись в общий ресурс (например, кэш).
Вывод:DispatchGroup для координации задач, DispatchBarrier — для синхронизации в concurrent очередях.