Junior — Middle
როგორ იქცევა პროგრამა, თუ ერთდროულად ხორციელდება კონკურენტული კითხვა რუკიდან?
sobes.tech AI
პასუხი AI-სგან
Go ენის ფარგლებში, ერთდროულად უსაფრთხო კითხვა რუკიდან არ იწვევს პანიკას ან შეცდომებს. პრობლემები წარმოიქმნება, თუ ერთდროულად ხდება დაწერა ან კითხვა და დაწერა. თუ პროგრამაში მხოლოდ რამდენიმე goroutine კითხულობს მნიშვნელობებს რუკიდან და არ იცვლის მათ, ეს უსაფრთხოა. მაგრამ თუ მინიმუმ ერთი goroutine იცვლის რუკას, საჭიროა სინქრონიზაციის მექანიზმების გამოყენება, მაგალითად, sync.RWMutex ან sync.Map.
უსაფრთხო კითხვა sync.RWMutex-ის გამოყენებით:
var m = make(map[string]int)
var mu sync.RWMutex
func read(key string) int {
mu.RLock()
defer mu.RUnlock()
return m[key]
}
func write(key string, value int) {
mu.Lock()
defer mu.Unlock()
m[key] = value
}
ამგვარად, ერთდროულად კითხვა ბეჭდვის გარეშე უსაფრთხოა, მაგრამ ბეჭდვის დროს საჭიროა სინქრონიზაცია.