Sobes.tech
Back to questions
Junior — Middle
85

Можно ли обеспечить безопасность при одновременной записи в Map из нескольких потоков?

Answer from AI

sobes.tech AI

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

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

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

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

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

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

Или использовать sync.Map:

var m sync.Map

func safeWrite(key string, value int) {
    m.Store(key, value)
}

Таким образом, для безопасности при одновременной записи нужно использовать синхронизацию.