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(), այն կխանգարի բոլոր ընթերցումներին և գրառումներին մինչև ավարտը։