Sobes.tech
Junior — Middle

Is het mogelijk om veilig gegevens uit een map-gegevensstructuur te lezen zonder het risico op fouten?

sobes.tech AI

Antwoord van AI

In Go is het lezen uit een map veilig als op dat moment niemand de map aan het wijzigen is. Echter, als er parallel geschreven wordt (toevoegen, verwijderen of wijzigen van elementen), kan het lezen leiden tot een panic (runtime error).

Om veilig uit een map te lezen in een multithread-omgeving, worden meestal gebruikt:

  • sync.RWMutex — om de map te vergrendelen voor schrijven en gelijktijdig lezen toe te staan
  • sync.Map — een gespecialiseerde, thread-veilige datastructuur voor maps

Voorbeeld met RWMutex:

var (
    m = make(map[string]int)
    mu sync.RWMutex
)

func read(key string) (int, bool) {
    mu.RLock()
    defer mu.RUnlock()
    val, ok := m[key]
    return val, ok
}

func write(key string, val int) {
    mu.Lock()
    defer mu.Unlock()
    m[key] = val
}

Zo is veilig lezen mogelijk als synchronisatie met schrijven wordt gegarandeerd.