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(), ის ბლოკავს ყველა წაკითხვას და წერას მისი დასრულებამდე.