Sobes.tech
Junior — Middle

Pode explicar o que é um Livelock no contexto da programação em Go?

sobes.tech IA

Resposta da IA

Livelock é uma situação em programas concorrentes ou multithread, onde os processos ou goroutines reagem constantemente uns aos outros, alterando seu estado, mas sem avançar para a conclusão da tarefa. Ao contrário do deadlock, onde os processos ficam bloqueados e esperam uns pelos outros, no livelock eles estão ativos, mas não fazem progresso.

Em Go, isso pode acontecer se as goroutines tentarem constantemente ceder, por exemplo, em um ciclo onde verificam o estado e o mudam imediatamente, sem permitir que a outra continue.

Exemplo:

func livelockExample() {
    var flag1, flag2 bool = true, true

    go func() {
        for flag1 {
            // tenta ceder, mas muda o estado constantemente
            flag2 = false
        }
    }()

    go func() {
        for flag2 {
            // também tenta ceder
            flag1 = false
        }
    }()

    // nenhuma das goroutines terminará, pois mudam os flags constantemente
}

Para evitar o livelock, é necessário sincronizar corretamente o acesso aos recursos compartilhados e prever condições de saída dos ciclos de espera.