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

Что произойдет, если одновременно несколько горутин попытаются получить доступ к одному и тому же ключу в карте?

Компании, где спрашивали
СБЕРСБЕР

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

sobes.tech AI

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

Чтобы избежать этого, необходимо использовать механизмы синхронизации, например:

  • sync.Mutex для блокировки доступа к карте.
  • sync.RWMutex для разделения блокировок на чтение и запись.
  • Специализированные структуры, например, sync.Map, которая безопасна для конкурентного доступа.

Пример использования sync.Mutex для защиты карты:

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

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

func read(key string) int {
    mu.Lock()
    defer mu.Unlock()
    return m[key]
}