Sobes.tech
Junior — Middle

Můžete vysvětlit, co je Livelock v kontextu programování v Go?

sobes.tech AI

Odpověď od AI

Livelock je situace v vícevláknových nebo konkurenčních programech, kdy procesy nebo gorutiny neustále reagují navzájem, mění svůj stav, ale nedosahují pokroku k dokončení úkolu. Na rozdíl od deadlocku, kde se procesy blokují a navzájem čekají, jsou při livelocku aktivní, ale nedochází k žádnému pokroku.

V Go se to může stát, pokud gorutiny neustále zkouší ustoupit, například v cyklu, kde kontrolují stav a ihned ho mění, aniž by umožnily druhé straně pokračovat.

Příklad:

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

    go func() {
        for flag1 {
            // snaží se ustoupit, ale neustále mění stav
            flag2 = false
        }
    }()

    go func() {
        for flag2 {
            // také se snaží ustoupit
            flag1 = false
        }
    }()

    // žádná z gorutin neskončí, protože neustále mění vlajky
}

Aby se předešlo livelocku, je třeba správně synchronizovat přístup ke sdíleným zdrojům a předvídat podmínky ukončení čekacích cyklů.