Junior — Middle
Hoe zorg je voor veilige toegang tot de kaart in een multithread-omgeving?
sobes.tech AI
Antwoord van AI
In Go is het nodig om synchronisatie te gebruiken voor veilige toegang tot een kaart (map) in een multithread-omgeving, omdat map geen thread-veilige datastructuur is. De meest gebruikelijke manier is het gebruik van een mutex (sync.Mutex of sync.RWMutex) om toegang tijdens lezen en schrijven te blokkeren.
Voorbeeld met sync.RWMutex:
import (
"sync"
)
var (
m = make(map[string]int)
mu sync.RWMutex
)
func read(key string) int {
mu.RLock() // blokkeert voor lezen
defer mu.RUnlock()
return m[key]
}
func write(key string, value int) {
mu.Lock() // blokkeert voor schrijven
defer mu.Unlock()
m[key] = value
}
Ook in Go is er het type sync.Map, dat een thread-veilige kaart implementeert met optimalisaties voor frequente leesbewerkingen. Het kan worden gebruikt als strikte typecontrole niet nodig is en eenvoud gewenst is:
import "sync"
var m sync.Map
m.Store("key", 42) // schrijven
value, ok := m.Load("key") // lezen
Dus, voor veilige toegang tot een map in een multithread-omgeving, gebruik mutexen of sync.Map.