Sobes.tech
Junior — Middle

Бұл массив көп ағынды ортада қолданғанда қауіпсіздікті қамтамасыз ете ме?

sobes.tech AI

AI-дан жауап

Go тілінде әдеттегі кесімдер (динамикалық өлшемді массивтер) әдепкі бойынша потокқа қауіпсіз емес. Егер бірнеше горутин бірдей кесімді оқып, жазып жатса және синхрондау болмаса, бұл деректердің жарысуына және болжамсыз мінез-құлыққа әкеледі.

Көп ағынды ортада қауіпсіздікті қамтамасыз ету үшін келесі әдістерді қолдану керек:

  • Мьютекстер (sync.Mutex) кесімді өзгерткен кезде қол жеткізуді блоктау үшін.
  • Каналдар (chan) горутиндер арасында деректерді беру үшін.
  • sync пакетінен немесе сыртқы кітапханалардан арнайы деректер құрылымдарын пайдалану.

Мьютекс қолданылған мысал:

var mu sync.Mutex
var slice []int

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

Мұндай шараларсыз массив параллель қолдануға қауіпсіз емес.