Senior
Remplir la tranche avec des éléments sans mutex pour qu'elle contienne tous les 1000 éléments.
sobes.tech IA
Réponse de l'IA
Чтобы заполнить слайс из 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])
}
Здесь каждая горутина пишет в свою часть слайса, поэтому мьютекс не нужен.