Гарантирован порядок 1, затем 2; после этого 4 идёт перед 5. Строка 3 может появиться до, между или после 4 и 5.
Определите порядок вывода в консоль №15
Гарантирован порядок 1, затем 2; после этого 4 идёт перед 5. Строка 3 может появиться до, между или после 4 и 5.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
import UIKit
func performPrint() {
print("1")
DispatchQueue.main.sync {
print("2")
}
DispatchQueue.main.async {
print("3")
}
print("4")
print("5")
}
let customQueue = DispatchQueue(label: "Queue", qos: .userInteractive, attributes: [], autoreleaseFrequency: .never, target: nil)
customQueue.async {
performPrint()
}
Задача: проанализировать, в каком порядке появятся строки в консоли при выполнении данного кода.
Ответ
Гарантирован порядок 1, затем 2; после этого 4 идёт перед 5. Строка 3 может появиться до, между или после 4 и 5.
performPrint() выполняется на customQueue, поэтому main.sync может дождаться печати 2, если главный поток обслуживает очередь и не заблокирован ожиданием customQueue. Затем main.async планирует 3, а текущая очередь независимо печатает 4 и 5. Возможны последовательности 1 2 3 4 5, 1 2 4 3 5 и 1 2 4 5 3. QoS не устанавливает порядок между этими очередями. При вызове самой функции с main queue синхронное обращение к ней привело бы к deadlock.