Sobes.tech
Junior

O que em Go garante a segurança de threads (thread safety)?

sobes.tech IA

Resposta da IA

A segurança de concorrência em Go é garantida por vários mecanismos:

  • Goroutines — threads leves que permitem executar código em paralelo.
  • Canais — a principal ferramenta para trocar dados de forma segura entre goroutines sem usar variáveis partilhadas.
  • Pacote sync — contém primitivas de sincronização, como Mutex para bloquear secções críticas, RWMutex para dividir bloqueios em leitura e escrita, e WaitGroup para aguardar a conclusão de um grupo de goroutines.

Exemplo de uso de um mutex para proteger um recurso comum:

import (
    "sync"
)

var mu sync.Mutex
var contador int

func incrementar() {
    mu.Lock()
    defer mu.Unlock()
    contador++
}

Desta forma, a segurança de concorrência em Go é alcançada através do uso correto de goroutines, canais e primitivas de sincronização do pacote sync.