Senior
30
Мьютекссіз элементтері бар slice-ты қалай толтыруға болады, ол барлық 1000 элементті қамтиды.
Сұралған компаниялар
FREEDOM LIFESTYLE
AI-дан жауап
sobes.tech AI
Чтобы заполнить слайс из 1000 элементов параллельно без использования мьютекса, можно заранее выделить слайс нужного размера и распределить индексы между горутинами так, чтобы каждая писала в уникальный участок слайса. Таким образом, гонок данных не будет, так как каждый элемент записывается только одной горутиной.
Пример:
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 // последний воркер может взять остаток
}
wg.Add(1)
go func(s, e int) {
defer wg.Done()
for i := s; i < e; i++ {
slice[i] = i * 2 // пример заполнения
}
}(start, end)
}
wg.Wait()
fmt.Println("Длина слайса:", len(slice))
fmt.Println("Первые 10 элементов:", slice[:10])
}
Здесь каждая горутина пишет в свою часть слайса, поэтому мьютекс не нужен.