Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Waitgroup

23/30
Recursos

Aportes 4

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Aqui está la documentacion de WaitGroup por si quieren saber más 😄

https://golang.org/pkg/sync/#WaitGroup

Un WaitGroup espera que una colección de gorutinas terminen su trabajo. La gorutina de main llama Add para configurar el número de gorutinas por las que tiene que esperar. Luego cada una de las gorutinas corre y llama a Done cuando terminan. Al mismo tiempo, Wait puede ser usado para bloquear hasta que todas las gorutinas hayan finalizado. Escribir código concurrente es súper fácil: todo lo que tenemos que hacer es poner “go” en frente de una llamada a una función o método.
runtime.NumCPU()
runtime.NumGoroutine()
sync.WaitGroup
func (wg *WaitGroup) Add(delta int)
func (wg *WaitGroup) Done()
func (wg *WaitGroup) Wait()

Codigo con comentarios:

package main

import (
	"fmt"
	"sync"
	"time"
)

/*
creates a wait group that gets incremented by on on every iteration, which
will as well run the doSmth() func that will substract 1 from the wait group
after it finishes. wg.Wait() at the end guarantees that it'll wait for the wg (counter)
to be 0.
*/

func doSmth(u int, wg *sync.WaitGroup) {
	defer wg.Done()

	fmt.Printf("Started at #%d\n", u)
	time.Sleep(time.Second * 2)
	fmt.Println("Ended...")
}

func main() {

	var wg sync.WaitGroup

	for i := 0; i < 10; i++ {
		wg.Add(1)
		go doSmth(i, &wg)
	}

	wg.Wait()
}

package main

import (
	"fmt"
	"sync"
	"time"
)

func main() {

	var wg sync.WaitGroup

	for i := 0; i < 10; i++ {
		wg.Add(1)
		go doSomething(i, &wg)
	}

	wg.Wait()
}

func doSomething(i int, wg *sync.WaitGroup) {
	defer wg.Done()

	fmt.Printf("Started %d\n", i)
	time.Sleep(time.Duration(2) * time.Second)
	fmt.Printf("Done: %d\n", i)
}