Junior — Middle
ორი ველის მქონე სტრუქტურას შეიძლება უსაფრთხოდ მივიჩნიოთ მრავალთრაქტული პირობებში გამოყენებისთვის?
sobes.tech AI
პასუხი AI-სგან
Go-ში ორი ველის მქონე სტრუქტურა თავისით არ არის ნაკადი უსაფრთხო. დამატებითი სინქრონიზაციის გარეშე, სტრუქტურის ველებზე მრავალ გორუტინიდან წვდომა შეიძლება გამოიწვიოს რბოლა.
თუ სტრუქტურის ველები არ იცვლება ინიციალიზაციის შემდეგ (ანუ, სტრუქტურა უცვლელია), მაშინ ის უსაფრთხოა მრავალ ნაკადზე წასაკითხად.
თუ ველები შეიძლება შეიცვალოს, უსაფრთხოების უზრუნველსაყოფად საჭიროა სინქრონიზაციის მექანიზმების გამოყენება, როგორიცაა sync.Mutex ან sync.RWMutex.
მაგალითი 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
}
ასე, სტრუქტურა თვითონ არ უზრუნველყოფს უსაფრთხოებას, მას სპეციალურად უნდა დაიცვას.