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
syncpaketist 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.