El paquete sync dispone de un struct llamado WaitGroup con una serie de métodos.
Este struct y sus métodos nos permiten llevar un conteo de las goroutines en ejecución.
Dispone de los siguientes métodos:
Mostrar el número "0" mil veces y el número "1" mil veces. Utilizar la programación concurrente.
Administrar la finalización del programa mediante un tipo WaitGroup.
package main
import (
"fmt"
"sync"
)
var wg sync.WaitGroup
func mostrar0() {
for f := 1; f <= 1000; f++ {
fmt.Print("0-")
}
wg.Done()
}
func mostrar1() {
for f := 1; f <= 1000; f++ {
fmt.Print("1-")
}
wg.Done()
}
func main() {
wg.Add(2)
go mostrar0()
go mostrar1()
wg.Wait()
}
Para definir una variable de tipo WaitGroup debemos importar el paquete sync donde esta define:
import (
"fmt"
"sync"
)
Definimos una variable global del tipo WaitGroup:
var wg sync.WaitGroup
Como sabemos este programa lanza dos Goroutine por lo que llamamos al método Add pasando el valor 2:
func main() {
wg.Add(2)
Seguidamente lanzamos las dos Goroutines:
go mostrar0()
go mostrar1()
Llamamos al método Wait del objeto wg del tipo WaitGroup que se detiene en su interior hasta que las dos Goroutines finalizan:
wg.Wait()
}