Sobes.tech
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 не е безопасен.