Intern
Омӯзиши харита дар Go бехатар аст?
sobes.tech AI
Ҷавоб аз AI
В езика Go, четенето от map не е безопасно за нишки, ако едновременно се извършва запис. За безопасно четене в многонишкова среда, трябва да се използва синхронизация, например sync.RWMutex за заключване при четене и писане, или sync.Map, който е специално разработен за конкурентен достъп.
Пример с sync.RWMutex:
import (
"sync"
)
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
}
Или използвайте sync.Map:
import "sync"
var m sync.Map
func read(key string) (interface{}, bool) {
return m.Load(key)
}
func write(key string, val interface{}) {
m.Store(key, val)
}
sync.Map е полезен, когато има много конкуриращи операции, но има особености по отношение на производителността и API-то.