Junior — Middle
Kas võib pidada kahte välja omavat struktuuri ohutuks mitme niidiga tingimustes kasutamiseks?
sobes.tech AI
Vastus AI-lt
Struktuur kahe väljariga Go keeles ei ole iseenesest voolude turvaline. Täiendava sünkroneerimise puudumisel võib juurdepääs struktuuri väljadele mitmest gorutist põhjustada võistlusolukordi.
Kui struktuuri väljad ei muutu pärast initsialiseerimist (st. struktuur on muutumatu), siis on see ohutu lugeda mitmest lõimest.
Kui väljad võivad muutuda, siis turvalisuse tagamiseks tuleb kasutada sünkroneerimismehhanisme, näiteks sync.Mutex või sync.RWMutex.
Näide mutexiga:
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
}
Seega, struktuur ise ei taga turvalisust, seda tuleb spetsiaalselt kaitsta.