Sobes.tech
Junior — Middle

რა განსხვავებაა სტანდარტული მუტექსის გამოყენებასა და წაკითხვასა და დაწერას (RWMutex) შესაძლებლობას შორის?

sobes.tech AI

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

Go დენის სტანდარტული Mutex (sync.Mutex) უზრუნველყოფს ექსკლუზიურ წვდომას რესურსზე: თითოეულ დროს მხოლოდ ერთი goroutine შეუძლია mutex-ის დაკავება, დანარჩენები ელიან.

კითხვის და დაწერის შესაძლებლობის მქონე (sync.RWMutex) mutex საშუალებას აძლევს:

  • რამდენიმე goroutine ერთდროულად დაიკავოს mutex კითვისთვის (RLock), თუ არ არის მწერალი.
  • მხოლოდ ერთი goroutine შეუძლია დაიკავოს mutex დაწერისთვის (Lock), ამ დროს ყველა მკითხველი და სხვა მწერლები ბლოკდება.

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

მაგალითი:

var mu sync.RWMutex
var data int

// კითხვა
mu.RLock()
fmt.Println(data)
mu.RUnlock()

// დაწერა
mu.Lock()
data = 42
mu.Unlock()

თუ ჩვეულებრივ Mutex-ს გამოიყენებთ, მაშინაც კი კითხვა ბლოკავს ერთმანეთს, რაც ამცირებს პარალელურობას.