Sobes.tech
Junior — Middle

Kas see massiiv tagab turvalisuse mitme lõimega keskkonnas kasutamisel?

sobes.tech AI

Vastus AI-lt

Go keeles tavalised lõigud (dünaamilise suurusega massiivid) ei ole vaikimisi niiditõrksed. Kui mitu gorutini loevad ja kirjutavad sama lõigu sisse ilma sünkroniseerimiseta, põhjustab see võistlusolukordi ja ettearvamatut käitumist.

Turvalisuse tagamiseks mitme niidiga keskkonnas tuleb kasutada:

  • Mutex'e (sync.Mutex) juurdepääsu blokeerimiseks lõigu muutmisel.
  • Kanaleid (chan) andmete edastamiseks gorutinite vahel.
  • Spetsialiseeritud andmestruktuure sync paketist või väljastpoolt raamatukogudest.

Näide mutex'iga:

var mu sync.Mutex
var slice []int

func appendSafe(val int) {
    mu.Lock()
    defer mu.Unlock()
    slice = append(slice, val)
}

Ilma nende meetmeteta ei ole massiiv turvaline paralleelseks kasutamiseks.