Junior — Middle
Jak zajistit bezpečný přístup ke kartě v prostředí s více vlákny?
sobes.tech AI
Odpověď od AI
V jazyce Go je nutné pro bezpečný přístup k mapě (map) v prostředí s více vlákny používat synchronizaci, protože map není datovou strukturou bezpečnou pro více vláken. Nejčastějším způsobem je použití mutexu (sync.Mutex nebo sync.RWMutex) k zámku přístupu při čtení a zápisu.
Příklad s použitím sync.RWMutex:
import (
"sync"
)
var (
m = make(map[string]int)
mu sync.RWMutex
)
func read(key string) int {
mu.RLock() // zamkne pro čtení
defer mu.RUnlock()
return m[key]
}
func write(key string, value int) {
mu.Lock() // zamkne pro zápis
defer mu.Unlock()
m[key] = value
}
Také v jazyce Go existuje typ sync.Map, který implementuje vlákny bezpečnou mapu s optimalizacemi pro časté operace čtení. Lze jej použít, pokud není potřeba přísná typová kontrola a požadována jednoduchost:
import "sync"
var m sync.Map
m.Store("key", 42) // zápis
value, ok := m.Load("key") // čtení
Tímto způsobem používejte mutexy nebo sync.Map pro bezpečný přístup k mapě v prostředí s více vlákny.