Sobes.tech
Junior — Middle

Milyen következményekkel jár, ha egyszerre írunk egy Map-be különböző versengő goroutine-okból?

sobes.tech MI

Válasz az MI-től

Go-ban az alapértelmezett térkép (map) nem biztonságos több goroutine egyidejű olvasására és írására. Ha több goroutine próbál ugyanabban az időben írni ugyanabba a térképbe szinkronizálás nélkül, az versenyhelyzetekhez, futás közbeni pánikhoz (fatális hiba: egyidejű térképírások) és kiszámíthatatlan programviselkedéshez vezet.

A problémák elkerülése érdekében:

  • Mutexeket (sync.Mutex) kell használni a térképhez való hozzáférés védelmére.
  • Speciális, szálbiztos adatstruktúrákat, például a sync.Map-ot alkalmazni.

Példa mutex-szel:

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

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

E nélkül a védelem nélkül a program váratlanul leállhat.