Sobes.tech
Junior — Middle

Čo sa stane, ak niekoľko gorutín súčasne skúša získať prístup k rovnakému kľúču v mape?

sobes.tech AI

Odpoveď od AI

V jazyku Go nie je mapa (map) bezpečnou dátovou štruktúrou pre súbežný prístup. Ak niekoľko gorútín súčasne číta a/alebo zapisuje do tej istej mapy bez synchronizácie, dôjde ku konkurenčným podmienkam a pravdepodobne k panike počas behu.

Aby ste tomu zabránili, je potrebné použiť mechanizmy synchronizácie, napríklad:

  • sync.Mutex na zamknutie prístupu k mape.
  • sync.RWMutex na oddelenie zámkov pre čítanie a zápis.
  • Špecializované štruktúry, ako je sync.Map, ktoré sú bezpečné pre konkurenčný prístup.

Príklad použitia sync.Mutex na ochranu mapy:

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]
}