Sobes.tech
Senior
30

Мьютекссіз элементтері бар slice-ты қалай толтыруға болады, ол барлық 1000 элементті қамтиды.

Сұралған компаниялар
FREEDOM LIFESTYLE

AI-дан жауап

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])
}

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