Sobes.tech
Junior — Middle

Программалоо тилинде кесимден атаандачылык менен маалыматтарды окуу мүмкүнбү?

sobes.tech AI

AIден жооп

Go тилинде, срездер (slices) — бул шилтемелүү түрлөр, алар эсинде жайгашкан массивге көрсөтөт. Бир эле учурда срезден окуу коопсуз, эгер эч ким срездин же негизги массивдин мазмунун өзгөртпөсө. Башкача айтканда, эгер бир нече goroutine гана бирдей срезден маалымат окуп жатса жана жазбай жатса, бул маалыматтардын атаандаштыгы пайда болбойт.

Бирок, эгер кеминде бир goroutine срездин элементтерин өзгөртүп жатса жана башкасы бир убакта окуп же жазып жатса, атаандаштык пайда болот жана жүрүм-турум аныкталган эмес.

Коопсуз бир убакта окуу мисалы:

slice := []int{1, 2, 3, 4, 5}
var wg sync.WaitGroup
wg.Add(2)
go func() {
    defer wg.Done()
    fmt.Println(slice[0])
}()
go func() {
    defer wg.Done()
    fmt.Println(slice[1])
}()
wg.Wait()

Эгер бир убакта окуу жана жазуу керек болсо, синхрондоштуруу механизмдерин (мисалы, mutex) же башка коопсуздук механизмдерин колдонушуңуз керек.