Sobes.tech
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.