Sobes.tech
Back to questions
Middle — Middle+
88

Можно ли безопасно выполнять запись в контейнер map в многопоточной среде без дополнительной синхронизации?

Answer from AI

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