Junior — Middle
Как да осигурим безопасен достъп до картата в многонишкова среда?
sobes.tech AI
Отговор от AI
В Go е необходимо да се използва синхронизация за безопасен достъп до карта (map) в многопоточна среда, тъй като map не е структура от данни, безопасна за потоци. Най-често срещаният начин е използването на мьютекс (sync.Mutex или sync.RWMutex) за блокиране на достъпа при четене и писане.
Пример с използване на sync.RWMutex:
import (
"sync"
)
var (
m = make(map[string]int)
mu sync.RWMutex
)
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
}
Също така в Go има тип sync.Map, който реализира потокобезопасна карта с оптимизации за чести операции по четене. Може да се използва, ако не е необходима строга типизация и желаете простота:
import "sync"
var m sync.Map
m.Store("key", 42) // записване
value, ok := m.Load("key") // четене
По този начин, за безопасен достъп до map в многопоточна среда, използвайте мьютекси или sync.Map.