Senior
Mutex და RWMutex რა არის? რა განსხვავებაა?
sobes.tech AI
პასუხი AI-სგან
Go-ში (sync.Mutex) არის სინქრონიზაციის primitive, რომელიც უზრუნველყოფს რესურსზე ექსკლუზიურ წვდომას. როდესაც ერთი goroutine იძენს Mutex-ს, სხვა goroutine-ები, რომლებიც ცდილობენ მის დაკავებას, ბლოკდებიან მანამ, სანამ ის არ გათავისუფლდება.
RWMutex (sync.RWMutex) არის Mutex-ის გაფართოება, რომელიც საშუალებას აძლევს წაკითხვასა და ჩაწერას წვდომის განყოფილებაში. იგი საშუალებას აძლევს რამდენიმე goroutine-ს ერთდროულად წაიკითხოს მონაცემები (RLock), მაგრამ ჩაწერა (Lock) მოითხოვს ექსკლუზიურ წვდომას და ბლოკავს ყველა წაკითხვასა და დაწერას.
სხვაობები:
- Mutex ბლოკავს ყველას, ვინც ცდილობს წვდომის მიღებას, სანამ ის დაკავებულია.
- RWMutex საშუალებას აძლევს რამდენიმე წაკითხვას მუშაობს პარალელურად, მაგრამ ჩაწერა ბლოკავს ყველას.
მაგალითი:
var mu sync.RWMutex
var data int
// წაკითხვა
mu.RLock()
fmt.Println(data)
mu.RUnlock()
// ჩაწერა
mu.Lock()
data = 42
mu.Unlock()