Sobes.tech
Junior — Middle

Welche Folgen hat es, wenn die Anzahl der Aufrufe von wg.Add nicht mit der Anzahl der laufenden Goroutines übereinstimmt?

sobes.tech KI

Antwort von AI

In Go wird sync.WaitGroup verwendet, um auf das Beenden einer Gruppe von Goroutinen zu warten. Die Methode wg.Add(n) erhöht den Zähler um n, und wg.Done() verringert ihn um 1. Wenn die Anzahl der Aufrufe von wg.Add nicht mit der Anzahl der gestarteten Goroutinen (also den Aufrufen von wg.Done) übereinstimmt, dann:

  • Wenn wg.Add kleiner ist als die Anzahl von wg.Done, kann der Zähler beim Aufruf von wg.Done negativ werden, was zu einem Laufzeitfehler (panic) führt.
  • Wenn wg.Add größer ist als die Anzahl von wg.Done, wird wg.Wait() für immer blockieren, da der Zähler nie null erreicht — dies führt zu einem Deadlock.

Daher ist es wichtig, wg.Add mit der richtigen Zahl aufzurufen, bevor die Goroutinen gestartet werden, und wg.Done genau so oft aufzurufen, wie hinzugefügt wurde.