Sobes.tech
Junior — Middle

Pode-se considerar uma estrutura com dois campos segura para uso em condições multithread?

sobes.tech IA

Resposta da IA

Uma estrutura com dois campos em Go por si só não é segura para acesso concorrente. Sem sincronização adicional, o acesso aos campos da estrutura por múltiplas goroutines pode levar a condições de corrida.

Se os campos da estrutura não mudam após a inicialização (ou seja, a estrutura é imutável), então ela é segura para leitura por múltiplas threads.

Se os campos podem mudar, então para garantir a segurança, deve-se usar mecanismos de sincronização, como sync.Mutex ou sync.RWMutex.

Exemplo com mutex:

import "sync"

type SafeStruct struct {
    mu sync.Mutex
    field1 int
    field2 string
}

func (s *SafeStruct) Set(field1 int, field2 string) {
    s.mu.Lock()
    defer s.mu.Unlock()
    s.field1 = field1
    s.field2 = field2
}

func (s *SafeStruct) Get() (int, string) {
    s.mu.Lock()
    defer s.mu.Unlock()
    return s.field1, s.field2
}

Dessa forma, a própria estrutura não garante segurança, ela precisa ser protegida especificamente.