Senior
Riempire lo slice con elementi senza mutex in modo che contenga tutti e 1000 gli elementi.
sobes.tech AI
Risposta dell'AI
Per riempire una slice di 1000 elementi in parallelo senza usare mutex, puoi preallocare la slice della dimensione necessaria e distribuire gli indici tra le goroutine in modo che ciascuna scriva in una sezione unica della slice. In questo modo, non ci saranno condizioni di gara, poiché ogni elemento viene scritto solo da una goroutine.
Esempio:
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 // l'ultimo worker può prendere il resto
}
wg.Add(1)
go func(s, e int) {
defer wg.Done()
for i := s; i < e; i++ {
slice[i] = i * 2 // esempio di riempimento
}
}(start, end)
}
wg.Wait()
fmt.Println("Lunghezza della slice:", len(slice))
fmt.Println("Primi 10 elementi:", slice[:10])
}
Qui, ogni goroutine scrive nella sua parte della slice, quindi non è necessario usare mutex.