Sobes.tech
Junior — Middle

რა ტიპის ურთიერთგამორიცხვები (Mutex) არის განხორციელებული Go-ს სტანდარტულ ბიბლიოთეკაში?

sobes.tech AI

პასუხი AI-სგან

Go-ის სტანდარტულ ბიბლიოთეკაში განხორციელებულია მთავარი ურთიერთგამორიცხვის ტიპი — sync.Mutex. ეს არის მარტივი mutex, რომელიც უზრუნველყოფს ბლოკირებას და გათავისუფლებას კრიტიკული სექციების კოდის დაცვაში ერთდროულად წვდომისგან.

გარდა ამისა, არსებობს sync.RWMutex — mutex-ის გაფართოებული ვერსია, რომელიც საშუალებას აძლევს რამდენიმე მკითხველს ერთდროულად შეინარჩუნოს ბლოკირება, მაგრამ წერა იკეტება ექსკლუზიურად.

sync.Mutex-ის გამოყენების მაგალითი:

var mu sync.Mutex
var counter int

func increment() {
    mu.Lock()
    defer mu.Unlock()
    counter++
}

და მაგალითი sync.RWMutex-თან:

var rwMu sync.RWMutex
var data int

func readData() int {
    rwMu.RLock()
    defer rwMu.RUnlock()
    return data
}

func writeData(val int) {
    rwMu.Lock()
    defer rwMu.Unlock()
    data = val
}