Sobes.tech
Junior — Middle

Vai ir droši izmantot kopīgus resursus, piemēram, Map, vienlaikus piekļūstot no vairākām goroutine?

sobes.tech AI

Atbilde no AI

Nē, standarta karte (map) Go nav droša vairāku pavedienu piekļuvei un to nevar izmantot vienlaikus no vairākām gorutīnām bez papildu sinhronizācijas. Bez aizsardzības var rasties datu sacensības un panika.

Lai droši izmantotu koplietotos resursus, piemēram, kartes, daudz pavedienu vidē, var:

  • Izmantot sync.Mutex vai sync.RWMutex, lai aizsargātu piekļuvi kartei.
  • Izmantot sync.Map, kas ir specializēta un droša datu struktūra kartei.

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()
}

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

Izmantojot sync.Map:

var m sync.Map

m.Store("key", 42)
value, ok := m.Load("key")