Middle
როგორ ავიცილოთ მონაცემთა შეჯიბრი? როგორ მუშაობს Mutex?
sobes.tech AI
პასუხი AI-სგან
მონაცემთა რბოლა ხდება, როდესაც რამდენიმე გოროტინი ერთდროულად მიმართავს საერთო რესურსს წაკითხვასა და დაწერისთვის სინქრონიზაციის გარეშე, რაც იწვევს წინასწარ განსაზღვრულ შედეგებს.
გადაწყვეტილი უნდა იყოს მონაცემთა რბოლები Go-ში, სინქრონიზაციის მექანიზმების გამოყენებით, მაგალითად, sync.Mutex. Mutex (ურთიერთგამორიცხვა) არის primitive, რომელიც უზრუნველყოფს, რომ მხოლოდ ერთი გოროტინი ერთდროულად ახორციელებს კრიტიკულ სექციას.
Mutex-ის მუშაობის პრინციპი:
- წვდომის წინ საერთო რესურსზე, გოროტინი იძახის
Lock(), რომელიც ბლოკავს mutex-ს. - თუ mutex უკვე ბლოკირებულია, გოროტინი ელოდება მისი გათავისუფლებას.
- სამუშაო დასრულების შემდეგ,
Unlock()იძახება, რომელიც გათავისუფლებს mutex-ს.
მაგალითი Mutex-ის გამოყენების Go-ში:
import (
"fmt"
"sync"
)
func main() {
var mu sync.Mutex
გამოთვლითი := 0
გაზრდა := func() {
mu.Lock()
defer mu.Unlock()
გამოთვლითი++
}
var wg sync.WaitGroup
for i := 0; i < 1000; i++ {
wg.Add(1)
go func() {
defer wg.Done()
გაზრდა()
}()
}
wg.Wait()
fmt.Println("გამოთვლითი:", გამოთვლითი)
}
ამგვარად, Mutex-ის გამოყენება თავიდან აცილებს ერთდროულ წვდომას გაზიარებულ მონაცემებზე და ამცირებს რბოლებს.