Junior — Middle
Explique o princípio de funcionamento do mecanismo de sincronização de goroutines no contexto da execução concorrente de tarefas.
sobes.tech IA
Resposta da IA
Em Go, as goroutines são threads leves que executam de forma concorrente. Para sincronizar as goroutines, utilizam-se mecanismos que permitem coordenar o acesso a recursos partilhados e ordenar a execução.
Principais mecanismos de sincronização:
- Canais (channels): permitem transmitir dados entre goroutines, garantindo a sincronização através da troca de mensagens.
- Mutexes (sync.Mutex): bloqueiam o acesso a dados partilhados para evitar condições de corrida.
- WaitGroup (sync.WaitGroup): permite aguardar a conclusão de um grupo de goroutines.
Exemplo com canal:
package main
import (
"fmt"
)
func worker(ch chan int) {
val := <-ch // espera por dados do canal
fmt.Println("Valor recebido:", val)
}
func main() {
ch := make(chan int)
go worker(ch)
ch <- 42 // envia dados pelo canal
}
Aqui, o canal garante a sincronização: a goroutine worker espera até que o main envie um valor.