Junior — Middle
Biztonságosnak tekinthető-e két mezővel rendelkező szerkezet több szálas környezetben való használatra?
sobes.tech MI
Válasz az MI-től
A két mezőt tartalmazó struktúra Go-ban önmagában nem szálbiztos. További szinkronizáció nélkül a struktúra mezőihez való hozzáférés több goroutine-ból versenyhelyzeteket okozhat.
Ha a struktúra mezői az inicializálás után nem változnak (azaz, a struktúra változatlan), akkor több szálról olvasásra biztonságos.
Ha azonban a mezők változhatnak, akkor a biztonság érdekében szinkronizációs mechanizmusokat kell használni, például sync.Mutex vagy sync.RWMutex.
Mutex példával:
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
}
Így a struktúra maga nem garantálja a biztonságot, azt külön kell védeni.