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) ё дигар воситаҳои бехатариро истифода баред.