Junior — Middle
Wyjaśnij, czym jest blokada odczytu-zapisu (RWMutex) i jak jest używana do zarządzania dostępem do danych.
sobes.tech AI
Odpowiedź od AI
Blokada odczytu-zapisu (RWMutex) w Go to mechanizm synchronizacji, który pozwala wielu goroutine na jednoczesne odczytywanie danych, jednocześnie gwarantując wyłączny dostęp podczas zapisu.
- RLock() / RUnlock() — blokada do odczytu. Wiele goroutine może utrzymywać tę blokadę jednocześnie.
- Lock() / Unlock() — blokada do zapisu. Tylko jedna goroutine może ją utrzymywać, a podczas tego czasu nie są dozwolone żadne odczyty.
To zwiększa wydajność, gdy operacji odczytu jest dużo, a zapisów rzadko.
Przykład użycia:
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
}
W tym przykładzie, kilka goroutine może jednocześnie wywołać readData(), ale jeśli wywołana zostanie writeData(), blokuje ona wszystkie odczyty i zapisy do jej zakończenia.