Sobes.tech
Junior — Middle

Може ли да се осигури безопасност при едновременен запис в Map от няколко потока?

sobes.tech AI

Отговор от 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)
}

По този начин, за безопасност при едновременен запис, трябва да се използва синхронизация.