Sobes.tech
Junior — Middle

Kādas situācijas var rasties vienlaicīgas ierakstīšanas laikā kartes tipa glabātuvē?

sobes.tech AI

Atbilde no AI

Go valodā standarta karte (map) nav droša vienlaicīgai lasīšanai un rakstīšanai no vairākām gorutīnām. Ja vairākas gorutīnas vienlaicīgi raksta datus mapē bez sinhronizācijas, tas var novest pie izpildes panikas ar ziņojumu "concurrent map writes" vai programmas neparedzētas uzvedības.

Lai izvairītos no šādām problēmām, ir jāizmanto sinhronizācijas mehānismi, piemēram, mutex (sync.Mutex) vai specializētas struktūras, kā sync.Map, kas ir drošas konkurējošai piekļuvei.

Piemērs ar mutex:

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

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

Bez šādas aizsardzības vienlaicīga rakstīšana var novest pie datu bojājumiem vai negaidītas programmas aizvēršanas.