Sobes.tech
Junior — Middle

Co se stane, pokud několik gorutin současně pokusí získat přístup ke stejnému klíči v mapě?

sobes.tech AI

Odpověď od AI

V jazyce Go není mapa (mapa) vlákny bezpečná datová struktura. Pokud několik gorutin současně čte a/nebo zapisuje do stejné mapy bez synchronizace, dojde ke konkurenčním podmínkám a pravděpodobně k panice za běhu.

Abychom tomu zabránili, je nutné použít mechanismy synchronizace, například:

  • sync.Mutex pro zámek přístupu k mapě.
  • sync.RWMutex pro oddělení zámků pro čtení a zápis.
  • Specializované struktury, například sync.Map, které jsou bezpečné pro konkurenční přístup.

Příklad použití sync.Mutex k ochraně 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]
}