Sobes.tech
Назад к вопросам
Junior — Middle
79

Какие последствия возникают при одновременной записи в Map из разных конкурирующих горутин?

Компании, где спрашивали
КуперКупер

Ответ от нейросети

sobes.tech AI

В Go стандартная карта (map) не является потокобезопасной для одновременного чтения и записи из нескольких горутин. Если несколько горутин одновременно пытаются записывать в одну и ту же map без синхронизации, это приведет к гонкам данных, панике runtime (fatal error: concurrent map writes) и непредсказуемому поведению программы.

Чтобы избежать проблем, нужно использовать:

  • Мьютексы (sync.Mutex) для защиты доступа к map.
  • Специализированные потокобезопасные структуры данных, например sync.Map.

Пример с мьютексом:

var mu sync.Mutex
var m = make(map[string]int)

func write(key string, value int) {
    mu.Lock()
    m[key] = value
    mu.Unlock()
}

Без такой защиты программа может аварийно завершиться.