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