Senior
Може ли да се пише в една map от различни горутини едновременно? Какво ще се случи?
sobes.tech AI
Отговор от AI
В Go не е безопасно да пишете в една и съща карта от различни горутини едновременно без допълнителна синхронизация. Стандартната карта не е потокобезопасна, и едновременните операции за писане могат да доведат до паника (runtime panic) или повреждане на данните.
За безопасна употреба на карта в конкурентна среда, може да:
- Използвате sync.Mutex или sync.RWMutex за защита на достъпа до картата.
- Използвате sync.Map, специализирана и потокобезопасна структура за данни за карти.
Пример с mutex:
var (
m = make(map[string]int)
mu sync.Mutex
)
func write(key string, value int) {
mu.Lock()
m[key] = value
mu.Unlock()
}
Без такава защита, програмата може неочаквано да спре.