Junior — Middle
Kako obezbediti siguran pristup karti u višestrukom okruženju?
sobes.tech АИ
Одговор од АИ
У 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") // читање
Дакле, за безбедан приступ мапи у мулти-тред окружењу, користите мјутексе или sync.Map.