Sobes.tech
Intern

Was passiert, wenn der Zähler von sync.WaitGroup aufgrund zusätzlicher Aufrufe von Done im Vergleich zu Add negativ wird?

sobes.tech KI

Antwort von AI

Wenn der Zähler von sync.WaitGroup in Go negativ wird, weil mehr Done()-Aufrufe als Add() aufgerufen werden, tritt zur Laufzeit eine Panik (panic) auf.

WaitGroup verfolgt die Anzahl der erwarteten Goroutinen über einen Zähler. Bei Aufruf von Add(n) erhöht sich der Zähler um n, bei Done() verringert er sich um 1. Wenn der Zähler kleiner als null wird, gilt dies als Nutzungsfehler.

Beispiel für einen Fehler:

var wg sync.WaitGroup
wg.Add(1)
wg.Done()
wg.Done() // zusätzlicher Aufruf, führt zu panic

Die Panik tritt mit der Meldung auf:

panic: sync: negative WaitGroup counter

Daher ist es wichtig, eine strikte Balance zwischen Add und Done zu wahren, um diesen Fehler zu vermeiden.