Sobes.tech
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()