Sobes.tech
Middle — Middle+

Je bezpečné zapisovať do kontajnera map v prostredí s viacerými vláknami bez ďalšej synchronizácie?

sobes.tech AI

Odpoveď od AI

V Go štandardná mapa (map) nie je bezpečná pre zápis v prostredí s viacerými vláknami. Ak niekoľko gorútín súčasne zapisuje do mapy bez synchronizácie, dôjde k závodom a panike počas behu.

Pre bezpečný zápis do mapy v prostredí s viacerými vláknami je potrebné použiť:

  • sync.Mutex alebo sync.RWMutex na uzamknutie prístupu;
  • sync.Map, bezpečnú pre vlákna implementáciu mapy zo štandardnej knižnice.

Príklad s sync.Mutex:

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

func safeWrite(kľúč string, hodnota int) {
    mu.Lock()
    m[kľúč] = hodnota
    mu.Unlock()
}

Bez takejto synchronizácie nie je zápis do mapy bezpečný.