Sobes.tech
Junior — Middle

Mi történik, ha több goroutine egyszerre próbál hozzáférni ugyanahhoz a kulcshoz egy térképen?

sobes.tech MI

Válasz az MI-től

Go nyelvben a térkép (map) nem szálbiztos adatszerkezet. Ha több goroutine egyszerre próbál olvasni és/vagy írni ugyanarra a térképre szinkronizálás nélkül, akkor versenyhelyzetekhez és valószínűleg futás közbeni pánikhoz vezet.

Ennek elkerülése érdekében szinkronizációs mechanizmusokat kell használni, például:

  • sync.Mutex a térkép hozzáférésének zárolására.
  • sync.RWMutex az olvasási és írási zárolások elkülönítésére.
  • Speciális struktúrák, például a sync.Map, amelyek biztonságosak a párhuzamos hozzáféréshez.

A sync.Mutex használatával védett térkép példája:

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