Junior — Middle
При кои условия използването на main.sync няма да доведе до взаимно блокиране на нишки?
sobes.tech AI
Отговор от AI
Използването на DispatchQueue.main.sync няма да доведе до взаимна блокировка (deadlock), освен ако извикването не се извършва от главния поток. Ако извикате main.sync от главния поток, този поток ще чака завършването на блока, който не може да започне, тъй като главният поток вече е зает — това причинява deadlock.
Пример за безопасна употреба:
DispatchQueue.global().async {
DispatchQueue.main.sync {
// Актуализация на UI
}
}
Тук извикването на main.sync се извършва от фонов поток, затова не възниква блокиране. Основното правило е никога да не извиквате DispatchQueue.main.sync от главния поток.