Sobes.tech
Junior — Middle

Kādas sekas rodas, ja vienlaikus rakstām Map no dažādām konkurējošām gorutinām?

sobes.tech AI

Atbilde no AI

Standarta karte (map) Go valodā nav droša vienlaicīgai lasīšanai un rakstīšanai no vairākām gorutīnām. Ja vairākas gorutīnas vienlaicīgi mēģina rakstīt tajā pašā kartē bez sinhronizācijas, tas novedīs pie sacensību stāvokļiem, izpildes laikā panikas (fatāla kļūda: vienlaicīgi rakstīšana kartē) un neparedzamas programmas uzvedības.

Lai izvairītos no problēmām, jāizmanto:

  • mutexi (sync.Mutex), lai aizsargātu piekļuvi kartei.
  • specializētas, drošas datu struktūras, piemēram, sync.Map.

Piemērs ar mutex:

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

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

Bez šādas aizsardzības programma var negaidīti pārtraukt darbību.