Sobes.tech
Middle

O que acontece se uma chamada síncrona a si mesmo for feita no fluxo principal, e por que isso levaria a um deadlock?

sobes.tech IA

Resposta da IA

Se no thread principal de uma aplicação iOS fizer uma chamada síncrona a si mesmo, por exemplo, através de DispatchQueue.main.sync, isso levará a um deadlock.

Por que isso acontece:

  • O thread principal já está ocupado a executar o código atual.
  • Ao fazer uma chamada síncrona, tenta executar um bloco de código que deve ser colocado na fila do thread principal.
  • Mas o thread principal não pode processar esse bloco até que o atual termine, e o atual espera a conclusão da chamada síncrona.

Como resultado, cria-se uma situação em que o thread espera a si mesmo, e a execução para para sempre.

Exemplo em Swift:

DispatchQueue.main.sync {
    // Este código tenta executar-se de forma síncrona no thread principal,
    // mas se a chamada vier do thread principal, ocorrerá um deadlock
}