Junior — Middle
Welke maatregelen worden genomen om het optreden van de uitzondering ConcurrentModificationException te voorkomen bij gelijktijdige modificatie van een Map-object door meerdere threads?
sobes.tech AI
Antwoord van AI
In Go is een map (map) niet thread-safe voor gelijktijdig lezen en schrijven vanuit meerdere goroutines. Om ConcurrentModificationException (het equivalent in Go is een panic bij gelijktijdige toegang) te voorkomen, worden de volgende maatregelen genomen:
- Gebruik van mutex (
sync.Mutexofsync.RWMutex) om toegang tot de map te synchroniseren. - Gebruik van thread-safe datastructuren, bijvoorbeeld
sync.Map, die speciaal is ontworpen voor gelijktijdige toegang.
Voorbeeld met mutex:
var mu sync.RWMutex
var m = make(map[string]int)
func read(key string) int {
mu.RLock()
defer mu.RUnlock()
return m[key]
}
func write(key string, value int) {
mu.Lock()
defer mu.Unlock()
m[key] = value
}
Gebruik van sync.Map:
var m sync.Map
func write(key string, value int) {
m.Store(key, value)
}
func read(key string) (int, bool) {
val, ok := m.Load(key)
if !ok {
return 0, false
}
return val.(int), true
}
Op deze manier moet je synchronisatie of gespecialiseerde structuren gebruiken om fouten bij gelijktijdige toegang tot maps te voorkomen.