Sobes.tech
Junior — Middle

Kokios pasekmės kyla, kai vienu metu rašoma į Map iš skirtingų konkuruojančių gorutinų?

sobes.tech AI

Atsakymas iš AI

Go standarto žemėlapis (map) nėra saugus vienu metu skaityti ir rašyti iš kelių gorutinių. Jei keli gorutinai vienu metu bando rašyti į tą patį žemėlapį be sinchronizacijos, tai sukels lenktynių sąlygas, vykdymo metu paniką (fatali klaidą: vienu metu rašant į žemėlapį) ir nenuspėjimą programos elgesį.

Kad išvengtumėte problemų, turite naudoti:

  • Mutex'us (sync.Mutex), kad apsaugotumėte prieigą prie žemėlapio.
  • Specializuotas, saugias daugiaprocesines duomenų struktūras, pavyzdžiui, sync.Map.

Pavyzdys su mutex:

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

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

Be tokios apsaugos, programa gali netikėtai užstrigti.