Назад к вопросам
OZON
Senior
4
Какой примитивный подход позволит абсолютно параллельно и корректно записать все значения, учитывая что у нас фиксированный массив и фиксированное количество горутин?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Если у нас есть фиксированный массив и фиксированное количество горутин, и нужно параллельно и корректно записать все значения, то примитивный и эффективный подход — разделить работу так, чтобы каждая горутина писала в свой уникальный индекс массива. Это исключит гонки данных и необходимость в синхронизации.
Пример:
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 теперь заполнен корректно
}
Таким образом, каждая горутина отвечает за свой участок массива, что гарантирует корректность и параллелизм без блокировок.