Sobes.tech
Junior — Middle

გთხოვთ, ახსენით, რა არის Read-Write ბლოკირება (RWMutex) და როგორ გამოიყენება მონაცემებზე წვდომის მართვაში.

sobes.tech AI

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

Go-ს ენის Read-Write (RWMutex) ბლოკირება არის სინქრონიზაციის მექანიზმი, რომელიც საშუალებას აძლევს რამდენიმე goroutine-ს ერთდროულად წაიკითხოს მონაცემები, მაგრამ ერთდროულად უზრუნველყოფს ექსკლუზიურ წვდომას წერის დროს.

  • RLock() / RUnlock() — წერისთვის ბლოკირება. რამდენიმე goroutine ერთდროულად შეუძლია ამ ბლოკის შენარჩუნება.
  • Lock() / Unlock() — წერისთვის ბლოკირება. მხოლოდ ერთი goroutine-ს შეუძლია მისი შენარჩუნება, და ამ დროს წაკითხვები არ არის დაშვებული.

ეს ზრდის შესრულებას, როდესაც წაკითხვების ოპერაციები მეტია და წერა ნაკლებად ხდება.

გამოყენების მაგალითი:

var rwMutex sync.RWMutex
var data int

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

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

ამ მაგალითში, რამდენიმე goroutine ერთდროულად შეუძლია გამოიძახოს readData(), მაგრამ თუ გამოიძახება writeData(), ის ბლოკავს ყველა წაკითხვას და წერას მისი დასრულებამდე.