Junior — Middle
Vai var uzskatīt par drošu struktūru ar diviem laukiem, izmantojot to daudzšūnu apstākļos?
sobes.tech AI
Atbilde no AI
Struktūra ar diviem laukiem Go valodā pati par sevi nav pavedienu droša. Bez papildu sinhronizācijas piekļuve struktūras laukiem no vairākiem gorutīniem var novest pie sacensību stāvokļiem.
Ja struktūras lauki nemainās pēc inicializācijas (t.i., struktūra ir nemainīga), tad tā ir droša lasīšanai no vairākiem pavedieniem.
Ja lauki var mainīties, drošības nodrošināšanai ir jāizmanto sinhronizācijas mehānismi, piemēram, sync.Mutex vai sync.RWMutex.
Piemērs ar 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
}
Tādējādi, pati struktūra nesniedz drošības garantiju, to ir jāaizsargā īpaši.