Sobes.tech
Middle

Šta će se desiti ako u glavnoj niti izvršite sinhroni poziv samog sebe, i zašto će to dovesti do uzajamnog blokiranja?

sobes.tech АИ

Одговор од АИ

Если в основном потоке (main thread) iOS-приложения выполнить синхронный вызов самого себя, например, через DispatchQueue.main.sync, это приведёт к взаимной блокировке (deadlock).

Почему так происходит:

  • Основной поток уже занят выполнением текущего кода.
  • При синхронном вызове он пытается выполнить блок кода, который должен быть поставлен в очередь основного потока.
  • Но основной поток не может обработать этот блок, пока не завершит текущий, а текущий ждёт завершения синхронного вызова.

В итоге возникает ситуация, когда поток ждёт сам себя, и выполнение останавливается навсегда.

Пример на Swift:

DispatchQueue.main.sync {
    // Этот код пытается выполнить синхронно в основном потоке,
    // но если вызов происходит из основного потока, будет deadlock
}