Sobes.tech
Junior — Middle

Kas on ohutu kasutada jagatud ressursse nagu Map, kui neile pääseb ligi korraga mitu goroutine'i?

sobes.tech AI

Vastus AI-lt

Ei, Go standardkaart (map) ei ole niivõrd niiditõrge ja seda ei saa kasutada samaaegselt mitme goroutine'i poolt ilma täiendava sünkroniseerimiseta. Ilma kaitseta võib tekkida andmerikkumine ja pööre.

Turvalise ühiste ressursside, nagu kaartide, kasutamiseks mitmetuumses keskkonnas, saab:

  • Kasutada sync.Mutex või sync.RWMutex, et kaitsta kaardi juurdepääsu.
  • Kasutada sync.Map, mis on spetsialiseeritud ja niiditurvaline andmestruktuur kaartidele.

Näide mutex'iga:

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]
}

Sync.Map kasutamine:

var m sync.Map

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