Sobes.tech
Junior — Middle

Vai ir iespējams nodrošināt drošību, vienlaikus rakstot Map no vairākiem pavedieniem?

sobes.tech AI

Atbilde no AI

Go standarta karte (map) nav droša vienlaicīgai rakstīšanai no vairākām gorutīnām. Ja vairākas gorutīnas vienlaicīgi raksta mapē bez sinhronizācijas, tas novedīs pie panikas.

Lai nodrošinātu drošību vienlaicīgas rakstīšanas laikā, var:

  • Izmantot mutex (sync.Mutex vai sync.RWMutex), lai aizsargātu piekļuvi mapē.
  • Izmantot specializētas drošas datu struktūras, piemēram, sync.Map, kas paredzētas konkurējošai piekļuvei.

Piemērs ar mutex:

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

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

Vai izmantot sync.Map:

var m sync.Map

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

Tādējādi, nodrošinot drošību vienlaicīgai rakstīšanai, ir jāizmanto sinhronizācija.