Junior — Middle
Je možné považovať štruktúru so dvoma poľami za bezpečnú na použitie v podmienkach viacvláknového prostredia?
sobes.tech AI
Odpoveď od AI
Štruktúra s dvoma poľami v Go sama o sebe nie je vlákno bezpečná. Bez dodatočnej synchronizácie môže prístup k poľám štruktúry z viacerých gorútín viesť k podmienkam pretekania.
Ak sa polia štruktúry nemenia po inicializácii (t.j. štruktúra je nemenná), je bezpečná na čítanie z viacerých vlákien.
Ak sa polia môžu meniť, na zabezpečenie bezpečnosti je potrebné použiť mechanizmy synchronizácie, ako je sync.Mutex alebo sync.RWMutex.
Príklad s mutexom:
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
}
Takto samotná štruktúra nezaručuje bezpečnosť, musí byť špeciálne chránená.