Sobes.tech
Junior — Middle

Como funciona o bloqueio ao chamar o método sync numa fila sequencial?

sobes.tech IA

Resposta da IA

Ao chamar o método sync numa fila serial no GCD (Grand Central Dispatch), o thread atual fica bloqueado até que a tarefa passada ao sync seja concluída. Se sync for chamado do mesmo thread que atende essa fila, ocorre um deadlock, pois a fila não pode iniciar uma nova tarefa até que a atual termine, e o thread atual aguarda a conclusão da nova tarefa.

Exemplo:

let serialQueue = DispatchQueue(label: "com.exemplo.serial")

serialQueue.sync {
    print("Executando tarefa")
}
// O thread atual fica bloqueado até a tarefa terminar

É importante não chamar sync na mesma fila serial de dentro de uma tarefa dessa fila para evitar deadlocks.