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