Placement de groupe d'attente pour un comptage précis
Dans la programmation simultanée, le type sync.WaitGroup sert de primitive de synchronisation pour coordonner les goroutines. Il suit le nombre de tâches à accomplir avant qu'un appel bloquant à wg.Wait() puisse continuer.
Placement correct de wg.Add()
À Pour garantir un comptage précis des tâches, il est crucial d'appeler wg.Add(1) avant de lancer une goroutine qui appelle ensuite wg.Done(). Ce placement garantit que la goroutine principale se bloquera à wg.Wait() jusqu'à ce que toutes les goroutines lancées soient terminées.
Conséquences de placement alternatives
Comme démontré dans l'exemple de code, placer wg.Add(1) dans la goroutine peut conduire à l'achèvement prématuré de wg.Wait(). Cela se produit parce que, au sein de la même goroutine, wg.Done() est appelé immédiatement après wg.Add(1), provoquant la reprise de l'exécution de la goroutine principale avant que toutes les tâches ne soient terminées.
Achèvement déterministe
Lorsque wg.Add() est correctement placé avant le lancement de la goroutine, la goroutine principale ne peut atteindre wg.Wait() qu'après la boucle for. Cela garantit que wg.Add() est appelé exactement 100 fois, et donc wg.Wait() se bloque jusqu'à ce que wg.Done() soit appelé 100 fois.
Alternatives
Comme alternative, si le nombre d'itérations de la boucle est connu à l'avance, wg.Add(100) peut être appelé avant la boucle. Cependant, cette approche doit être utilisée avec prudence, car elle ne suppose aucun saut conditionnel dans la boucle.
Bonnes pratiques
Pour une utilisation cohérente et fiable de sync.WaitGroup, suivez ces directives :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!