Junior — Middle
Ar galima laikyti saugia struktūrą su dviem laukais, naudojant ją daugiasraityje sąlygose?
sobes.tech AI
Atsakymas iš AI
Struktūra su dviem laukais Go kalboje pati savaime nėra srauto saugi. Be papildomos sinchronizacijos, prieiga prie struktūros laukų iš kelių gorutinų gali sukelti lenktynių sąlygas.
Jei struktūros laukų keitimas nevyksta po inicializacijos (t.y., struktūra yra nekintama), tada ji yra saugi skaityti iš kelių srautų.
Jei laukus galima keisti, norint užtikrinti saugumą, reikia naudoti sinchronizacijos mechanizmus, pvz., sync.Mutex arba sync.RWMutex.
Pavyzdys su 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
}
Taip, struktūra pati nesuteikia saugumo garantijos, ją reikia specialiai apsaugoti.