Senior
მიუტექსის გარეშე სლაისი შეავსეთ, რათა მასში იყოს ყველა 1000 ელემენტი.
sobes.tech AI
პასუხი AI-სგან
მიუტექსის გამოყენების გარეშე შეგიძლიათ პარალელურად შეავსოთ 1000 ელემენტიანი სლაისი, თუ წინასწარ გამოყოფთ საჭირო ზომის სლაის და ინდექსებს შორის განაწილებთ goroutine-ების შორის ისე, რომ თითოეული დაწერს უნიკალურ ნაწილში სლაის. ამგვარად, მონაცემთა შეჯახება არ იქნება, რადგან თითოეული ელემენტი მხოლოდ ერთი 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("სლაისის სიგრძე:", len(slice))
fmt.Println("პირველი 10 ელემენტი:", slice[:10])
}
აქ, თითოეული goroutine წერს თავის ნაწილში სლაის, ამიტომ mutex-ის საჭიროება არ არის.