Sobes.tech
Intern

Mi történik, ha a sync.WaitGroup számlálója negatív lesz az Add-hez képest extra Done hívások miatt?

sobes.tech MI

Válasz az MI-től

Ha a sync.WaitGroup számlálója Go-ban negatívvá válik, mert a Done() hívások száma meghaladja az Add() hívások számát, akkor futás közben pánik (panic) lép fel.

A WaitGroup nyomon követi a várt goroutine-ok számát egy számláló segítségével. Az Add(n) hívás növeli a számlálót n-nel, a Done() hívás pedig csökkenti 1-gyel. Ha a számláló negatívvá válik, az használati hibának számít.

Hiba példája:

var wg sync.WaitGroup
wg.Add(1)
wg.Done()
wg.Done() // extra hívás, panic-hez vezet

A pánik a következő üzenettel jelentkezik:

panic: sync: negative WaitGroup counter

Ezért fontos szigorúan tartani az Add és Done közötti egyensúlyt, hogy elkerüljük ezt a hibát.