Sobes.tech
Middle+

Čo je to závodná podmienka v Go? Uveďte príklad.

sobes.tech AI

Odpoveď od AI

Podmienka preteku (race condition) v Go je situácia, keď niekoľko gorutín súčasne pristupuje k tej istej premennej bez správnej synchronizácie, a aspoň jedna z nich ju mení. To vedie k nepredvídateľnému správaniu programu.

Príklad podmienky preteku:

package main

import (
    "fmt"
    "time"
)

func main() {
    counter := 0

    for i := 0; i < 1000; i++ {
        go func() {
            counter++ // Nesynchronizovaná zmena
        }()
    }

    time.Sleep(time.Second)
    fmt.Println("Counter:", counter) // Výsledok môže byť menší ako 1000 kvôli preteku
}

V tomto príklade viac gorutín súčasne zvyšuje premennú counter bez synchronizácie, čo vedie k strate aktualizácií. Aby sa predišlo podmienkam preteku, používajú sa mutexy (sync.Mutex), kanály alebo iné mechanizmy synchronizácie.