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

Заполнить элементами слайс без мьютекса, чтобы в нём были все 1000 элементов.

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

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

sobes.tech AI

Чтобы заполнить слайс из 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])
}

Здесь каждая горутина пишет в свою часть слайса, поэтому мьютекс не нужен.