Sobes.tech
Senior
54

Може ли писати у једну мапу из различитих горутиних истовремено? Шта ће се десити?

Компаније где су питане
А7

Одговор од АИ

sobes.tech АИ

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

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

  • Использовать sync.Mutex или sync.RWMutex для защиты доступа к map.
  • Использовать sync.Map — специализированную потокобезопасную структуру данных для map.

Пример с mutex:

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

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

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