Translate

sábado, 9 de noviembre de 2019

Sincronizar canales en Go


Podemos usar canales para sincronizar la ejecución entre goroutines. Veamos un ejemplo de un programa que espero a que termine una gorutine:

package main
import (
    "fmt"
    "time"
)

func worker(done chan bool) {
    fmt.Print("working...")
    time.Sleep(time.Second)
    fmt.Println("done")
    done <- true
}

func main() {
    done := make(chan bool, 1)
    go worker(done)
    <-done
}

$ go run channel-synchronization.go   
working...done     

Cuando debemos esperar a que terminen varias gorutinas, podemos usar un WaitGroup.

Si eliminamos la línea <- done de este programa, el programa se cerraría incluso antes de que el worker comenzara.

Dejo link: https://gobyexample.com/channel-synchronization