Senior
Quelle approche primitive permettra d'enregistrer de manière absolument parallèle et correcte toutes les valeurs, en tenant compte que nous avons un tableau fixe et un nombre fixe de goroutines?
sobes.tech IA
Réponse de l'IA
Если у нас есть фиксированный массив и фиксированное количество горутин, и нужно параллельно и корректно записать все значения, то примитивный и эффективный подход — разделить работу так, чтобы каждая горутина писала в свой уникальный индекс массива. Это исключит гонки данных и необходимость в синхронизации.
Пример:
type Data []int
func worker(data Data, start, end int, wg *sync.WaitGroup) {
defer wg.Done()
for i := start; i < end; i++ {
data[i] = i * 2 // или любая другая логика записи
}
}
func main() {
size := 100
data := make(Data, size)
var wg sync.WaitGroup
numGoroutines := 5
chunkSize := size / numGoroutines
for i := 0; i < numGoroutines; i++ {
start := i * chunkSize
end := start + chunkSize
if i == numGoroutines-1 {
end = size
}
wg.Add(1)
go worker(data, start, end, &wg)
}
wg.Wait()
// data теперь заполнен корректно
}
Таким образом, каждая горутина отвечает за свой участок массива, что гарантирует корректность и параллелизм без блокировок.