Sobes.tech
Junior — Middle

Kan je gedeelde resources zoals Map veilig gebruiken bij gelijktijdige toegang vanuit meerdere goroutines?

sobes.tech AI

Antwoord van AI

Nee, de standaardkaart (map) in Go is niet threadveilig en kan niet gelijktijdig door meerdere goroutines worden gebruikt zonder aanvullende synchronisatie. Toegang zonder bescherming kan leiden tot racecondities en paniek.

Om gedeelde bronnen zoals kaarten veilig te gebruiken in een multithread-omgeving, kun je:

  • sync.Mutex of sync.RWMutex gebruiken om toegang tot de kaart te beschermen.
  • sync.Map gebruiken, een gespecialiseerde en threadveilige datastructuur voor kaarten.

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

Gebruik van sync.Map:

var m sync.Map

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