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.