Sobes.tech
Junior — Middle

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

sobes.tech АИ

Одговор од АИ

U Go-u, standardna mapa (map) nije sigurna za istovremeni zapis iz više gorutina. Ako više gorutina istovremeno zapisuje u mapu bez sinhronizacije, doći će do panike.

Da biste osigurali sigurnost pri istovremenom pisanju, možete:

  • Koristiti mutex (sync.Mutex ili sync.RWMutex) za zaštitu pristupa mapi.
  • Koristiti specijalizovane sigurnosne strukture podataka, poput sync.Map, koja je namenjena za konkurentan pristup.

Primer sa mutex-om:

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

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

Ili koristiti sync.Map:

var m sync.Map

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

Na ovaj način, za sigurnost pri istovremenom pisanju, potrebno je koristiti sinhronizaciju.