Sobes.tech
Назад к вопросам
Senior
4

Какой примитивный подход позволит абсолютно параллельно и корректно записать все значения, учитывая что у нас фиксированный массив и фиксированное количество горутин?

Компании, где спрашивали
OZONOZON

Ответ от нейросети

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 теперь заполнен корректно
}

Таким образом, каждая горутина отвечает за свой участок массива, что гарантирует корректность и параллелизм без блокировок.