Junior — Middle
Poate fi considerată sigură o structură cu două câmpuri pentru utilizarea în condiții multithread?
sobes.tech AI
Răspuns de la AI
O structură cu două câmpuri în Go nu este sigură pentru concurență de una singură. Fără sincronizare suplimentară, accesul la câmpurile structurii din mai multe goroutines poate duce la condiții de cursă.
Dacă câmpurile structurii nu se schimbă după inițializare (adică, structura este imutabilă), atunci este sigură pentru citire din mai multe fire.
Dacă însă câmpurile pot fi modificate, pentru a asigura siguranța trebuie utilizate mecanisme de sincronizare, cum ar fi sync.Mutex sau sync.RWMutex.
Exemplu cu 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
}
Astfel, structura în sine nu garantează siguranța, ea trebuie protejată în mod special.