Sobes.tech
Junior — Middle

Pode-se usar objetos de sincronização como argumentos ao chamar funções?

sobes.tech IA

Resposta da IA

Em Go, os objetos de sincronização, como sync.Mutex ou sync.WaitGroup, geralmente são passados por ponteiro para evitar copiar o estado interno e garantir o funcionamento correto.

É possível passar esses objetos como argumentos de função, mas é importante:

  • Passar um ponteiro para o objeto de sincronização, não uma cópia.
  • Não copiar objetos de sincronização, pois isso pode levar a um comportamento imprevisível.

Exemplo de passagem de *sync.Mutex para uma função:

func criticalSection(mu *sync.Mutex) {
    mu.Lock()
    defer mu.Unlock()
    // seção crítica
}

func main() {
    var mu sync.Mutex
    criticalSection(&mu)
}

Assim, os objetos de sincronização podem ser usados como argumentos, mas devem ser passados por ponteiro.