Sobes.tech
Junior — Middle

Šta će se desiti ako više gorutina istovremeno pokušaju da pristupe istoj ključe u mapi?

sobes.tech АИ

Одговор од АИ

У Go-у, карта (map) није безбедна структура података за рад у више нитова. Ако више горутина истовремено покушавају да читају и/или пишу у исту карту без синхронизације, то ће довести до такмичарских услова и вероватно панике током извршавања.

Да бисте то избегли, потребно је користити механизме за синхронизацију, на пример:

  • sync.Mutex за закључавање приступа карти.
  • sync.RWMutex за раздвајање закључавања за читање и писање.
  • Специјализоване структуре, као што је sync.Map, које су безбедне за конкурентни приступ.

Пример коришћења sync.Mutex за заштиту карте:

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

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

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