Sobes.tech
Senior

Boshqarmasiz 1000 element bo'lish uchun slice elementlarini to'ldiring.

sobes.tech AI

AIdan javob

Mutex ishlatmasdan 1000 elementdan iborat slice-ni parallel tarzda to'ldirish uchun, kerakli o'lchamdagi slice-ni oldindan ajratib olishingiz va indekslarni goroutine'lar orasida taqsimlab, har biri o'zining unikal bo'lakka yozishini ta'minlashingiz mumkin. Shu tarzda, ma'lumotlar uchun kurashlar bo'lmaydi, chunki har bir element faqat bitta goroutine tomonidan yoziladi.

Misol:

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 // oxirgi worker qolganini olishi mumkin
		}

		wg.Add(1)
		go func(s, e int) {
			defer wg.Done()
			for i := s; i < e; i++ {
				slice[i] = i * 2 // to'ldirish misoli
			}
		}(start, end)
	}

	wg.Wait()

	fmt.Println("Slice uzunligi:", len(slice))
	fmt.Println("Birinchi 10 element:", slice[:10])
}

Bu yerda, har bir goroutine o'z bo'lagida yozadi, shuning uchun mutex kerak emas.