Sobes.tech
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-ის გამოყენება თავიდან აცილებს ერთდროულ წვდომას გაზიარებულ მონაცემებზე და ამცირებს რბოლებს.