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.