Sobes.tech
Senior

Je možné písať do jednej mapy z rôznych gorútín súčasne? Čo sa stane?

sobes.tech AI

Odpoveď od AI

V jazyku Go nie je bezpečné zapisovať do tej istej mapy z rôznych gorútín súčasne bez ďalšej synchronizácie. Štandardná mapa nie je vlákno-bezpečná a súčasné operácie zápisu môžu viesť k panike (runtime panic) alebo poškodeniu dát.

Pre bezpečné používanie mapy v konkurenčnom prostredí môžete:

  • Použiť sync.Mutex alebo sync.RWMutex na ochranu prístupu k mape.
  • Použiť sync.Map, špecializovanú a vlákno-bezpečnú dátovú štruktúru pre mapy.

Príklad s mutexom:

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

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

Bez takejto ochrany môže program neočakávane skončiť.