Sobes.tech
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 от главния поток.