Sobes.tech
Junior — Middle

Kas notiks, ja vairākas gorutīnas vienlaikus mēģinās piekļūt tai pašai atslēgai kartē?

sobes.tech AI

Atbilde no AI

Go valodā karte (map) nav šķēršļu droša datu struktūra. Ja vairāki gorutīnas vienlaikus mēģina lasīt un/vai rakstīt tajā pašā kartē bez sinhronizācijas, tas novedīs pie sacensību apstākļiem un, visticamāk, izpildes laikā notiks panika.

Lai to novērstu, ir nepieciešams izmantot sinhronizācijas mehānismus, piemēram:

  • sync.Mutex kartes piekļuves bloķēšanai.
  • sync.RWMutex lasīšanas un rakstīšanas bloķu atdalīšanai.
  • Specializētas struktūras, piemēram, sync.Map, kas ir drošas konkurējošai piekļuvei.

Piemērs, kā izmantot sync.Mutex kartes aizsardzībai:

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

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

func read(key string) int {
    mu.Lock()
    defer mu.Unlock()
    return m[key]
}