Sobes.tech
Junior — Middle

Da li je sigurno koristiti zajedničke resurse poput Map kada im se pristupa istovremeno iz više gorutina?

sobes.tech АИ

Одговор од АИ

Не, стандартна карта (map) у Go није безбедна за рад у више тхредова и не може се користити истовремено из више горутиних без додатне синхронизације. Без заштите може доћи до трка услова и панике.

Да бисте безбедно користили заједничке ресурсе типа мапа у мулти-тхред окружењу, можете:

  • Користити sync.Mutex или sync.RWMutex за заштиту приступа мапи.
  • Користити sync.Map, специјализовану и безбедну за тхредове структуру података за мапе.

Пример са mutex-ом:

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

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

func read(key string) int {
    mu.Lock()
    defer mu.Unlock()
    return m[key]
}

Користите sync.Map:

var m sync.Map

m.Store("key", 42)
value, ok := m.Load("key")