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