Sobes.tech
Junior — Middle

Je možné zabezpečiť bezpečnosť pri súčasnom zápise do Map z viacerých vlákien?

sobes.tech AI

Odpoveď od AI

V Go, štandardná mapa (map) nie je bezpečná pre súčasný zápis z viacerých gorútín. Ak niekoľko gorútín súčasne zapisuje do mapy bez synchronizácie, dôjde k panike.

Na zabezpečenie bezpečnosti pri súčasnom zápise môžete:

  • Použiť mutex (sync.Mutex alebo sync.RWMutex) na ochranu prístupu k mape.
  • Použiť špecializované bezpečné dátové štruktúry, ako je napríklad sync.Map, ktorá je určená na konkurenčný prístup.

Príklad s mutexom:

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

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

Alebo použiť sync.Map:

var m sync.Map

func safeWrite(key string, value int) {
    m.Store(key, value)
}

Takto je pri súčasnom zápise potrebné používať synchronizáciu.