Senior
Омӯзиши ҳамзамон ба слайс бехатар аст? Агар 4 goroutines ҳар яке индексҳои беназири худро тағир диҳанд, оё ҳолати рақобат (race condition) ба вуҷуд меояд?
sobes.tech AI
Ҷавоб аз AI
Дар Go, дастрасии ҳамзамон ба слайс худ ба худ бехатар нест, зеро слайс структураест, ки ишорагари ба массив, дарозӣ ва қобилияти он мебошад. Аммо, агар 4 горутин ҳар яке индексҳои худро тағир диҳанд ва дар ҳамин ҳол дарозӣ ё қобилияти слайсро тағир надиҳанд, ҳолати рақобат (race condition) рух намедиҳад, зеро ҳар горутина бо як унсури алоҳида кор мекунад.
Муҳим аст, ки:
- Слайс пешакӣ бо андозаи зарурӣ тақсим карда шавад.
- Дар вақти навиштани тағирот ба сохтори слайс (масалан, бо append) нагардад.
Масал:
s := make([]int, 4)
var wg sync.WaitGroup
wg.Add(4)
for i := 0; i < 4; i++ {
go func(i int) {
defer wg.Done()
s[i] = i * 10
}(i)
}
wg.Wait()
Дар ин мисол, ҳолати рақобат рух намедиҳад, зеро ҳар горутина ба индексҳои беназири навишт.
Агар чанд горутин метавонанд дарозии слайсро тағир диҳанд ё бо ҳамон индекс кор кунанд, ниёз ба ҳамоҳангсозӣ аст.