Junior — Middle
Обяснете какво е Read-Write блокировка (RWMutex) и как се използва за управление на достъпа до данни.
sobes.tech AI
Отговор от AI
Блокировката за четене-запис (RWMutex) в Go е механизъм за синхронизация, който позволява на няколко горутини да четат данни едновременно, като същевременно гарантира изключителен достъп при писане.
- RLock() / RUnlock() — блокировка за четене. Множество горутини могат да държат тази блокировка едновременно.
- Lock() / Unlock() — блокировка за писане. Само една горутина може да я държи, и по време на това не са разрешени четения.
Това увеличава производителността, когато има много операции за четене и редки записи.
Пример за използване:
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
}
В този пример, няколко горутини могат да извикват readData() едновременно, но ако се извика writeData(), тя блокира всички четения и писания до нейното завършване.