Sobes.tech
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.