Sobes.tech
Senior

Aizpildiet sēklu bez mutex, lai tajā būtu visi 1000 elementi.

sobes.tech AI

Atbilde no AI

Bez izmantojot mutex, jūs varat paralēli aizpildīt 1000 elementu garu slice, ja iepriekš rezervējat nepieciešamā izmēra slice un sadalāt indeksus starp gorutīnām tā, lai katra rakstītu unikālā slice daļā. Tādējādi datu sacensības nenotiks, jo katrs elements tiek rakstīts tikai ar vienu gorutīnu.

Piemērs:

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 // pēdējais darbinieks var ņemt atlikumu
		}

		wg.Add(1)
		go func(s, e int) {
			defer wg.Done()
			for i := s; i < e; i++ {
				slice[i] = i * 2 // piemērs aizpildīšanai
			}
		}(start, end)
	}

	wg.Wait()

	fmt.Println("Slice garums:", len(slice))
	fmt.Println("Pirmie 10 elementi:", slice[:10])
}

Šeit, katra gorutina raksta savā daļā slice, tāpēc mutex nav nepieciešams.