Senior
Լրացրեք սլայսը առանց մյուտեքսի, որպեսզի այն ունենա բոլոր 1000 տարրերը։
sobes.tech AI
Պատասխան AI-ից
Մուտեքս օգտագործելու առանց կարող եք միաժամանակ լցնել 1000 տարրեր պարունակող slice-ը, եթե նախապես հատկացնեք անհրաժեշտ չափի slice և բաժանեք ինդեքսները goroutine-ների միջև այնպես, որ յուրաքանչյուրը գրի միայն յուրահատուկ հատվածում slice-ի։ Այսպիսով, տվյալների մրցակցություն չի լինի, քանի որ յուրաքանչյուր տարր միայն մեկ goroutine-ի կողմից է գրանցվում։
Օրինակ՝
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("Slice-ի երկարությունը:", len(slice))
fmt.Println("Առաջին 10 տարրերը:", slice[:10])
}
Այստեղ, յուրաքանչյուր goroutine գրում է իր հատվածում slice-ի, ուստի mutex-ը անհրաժեշտ չէ։