Go · Intermediário · Inglês · Técnico
deadlock
Situação em que goroutines ficam bloqueadas para sempre, cada uma esperando algo que outra deveria fazer. O runtime detecta quando todas estão paradas e encerra o programa.
Onde usar
Aparece como 'fatal error: all goroutines are asleep - deadlock!' ao enviar para channel sem receptor ou ao esquecer um Unlock. Em servidores, o deadlock parcial não é detectado e só se vê travado.
Em código
var mu sync.Mutex
mu.Lock()
mu.Lock() // trava para sempre
// fatal error: all goroutines are asleepExemplos
The program died with all goroutines asleep, a classic deadlock.
O programa morreu com todas as goroutines dormindo, um deadlock clássico.
Locking the same mutex twice causes a deadlock.
Travar o mesmo mutex duas vezes causa um deadlock.
Cuidado
O runtime só detecta deadlock quando todas as goroutines estão bloqueadas; se alguma ainda roda, o travamento passa em silêncio.
Sinônimos
travamento mútuo
Origem
De dead, 'morto', e lock, 'trava'.