Junior — Middle
Da li se struktura sa dva polja može smatrati sigurnom za korišćenje u višestrukim nitima?
sobes.tech АИ
Одговор од АИ
Struktura sa dva polja u Go sama po sebi nije sigurnos za višestruki pristup. Bez dodatne sinhronizacije, pristup poljima strukture iz više gorutina može dovesti do uslova trke.
Ako se polja strukture ne menjaju nakon inicijalizacije (tj. struktura je nepromenljiva), onda je sigurna za čitanje iz više niti.
Ako se polja mogu menjati, za obezbeđivanje sigurnosti potrebno je koristiti mehanizme sinhronizacije, kao što su sync.Mutex ili sync.RWMutex.
Primer sa mutex-om:
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
}
На овај начин, сама структура не гарантује безбедност, она мора бити посебно заштићена.