Sobes.tech
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.