Senior
Boshqarmasiz 1000 element bo'lish uchun slice elementlarini to'ldiring.
sobes.tech AI
AIdan javob
Mutex ishlatmasdan 1000 elementdan iborat slice-ni parallel tarzda to'ldirish uchun, kerakli o'lchamdagi slice-ni oldindan ajratib olishingiz va indekslarni goroutine'lar orasida taqsimlab, har biri o'zining unikal bo'lakka yozishini ta'minlashingiz mumkin. Shu tarzda, ma'lumotlar uchun kurashlar bo'lmaydi, chunki har bir element faqat bitta goroutine tomonidan yoziladi.
Misol:
package main
import (
"fmt"
"sync"
)
func main() {
size := 1000
slice := make([]int, size)
var wg sync.WaitGroup
workers := 10
chunkSize := size / workers
for w := 0; w < workers; w++ {
start := w * chunkSize
end := start + chunkSize
if w == workers-1 {
end = size // oxirgi worker qolganini olishi mumkin
}
wg.Add(1)
go func(s, e int) {
defer wg.Done()
for i := s; i < e; i++ {
slice[i] = i * 2 // to'ldirish misoli
}
}(start, end)
}
wg.Wait()
fmt.Println("Slice uzunligi:", len(slice))
fmt.Println("Birinchi 10 element:", slice[:10])
}
Bu yerda, har bir goroutine o'z bo'lagida yozadi, shuning uchun mutex kerak emas.