Sobes.tech
Middle — Middle+

Kas on ohutu teha kirjutist map konteinerisse mitme niidiga keskkonnas ilma täiendava sünkroniseerimiseta?

sobes.tech AI

Vastus AI-lt

Go-s standardkaart (map) ei ole niiditurvaline kirjutamiseks mitme niidiga keskkonnas. Kui mitu goroutine'i kirjutavad samaaegselt map'i ilma sünkroniseerimiseta, põhjustab see võistlusolukordi ja jooksva ajal paanikuid.

Turvalise kirjutamise jaoks mitme niidiga keskkonnas tuleb kasutada:

  • sync.Mutex või sync.RWMutex juurdepääsu lukustamiseks;
  • sync.Map, standardraamatukogust niiditurvaline kaardi rakendus.

Näide sync.Mutex'iga:

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

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

Ilma sellise sünkroniseerimiseta ei ole kirjutamine map'i turvaline.