Sobes.tech
Junior — Middle

Kiedy zaleca się stosowanie mechanizmu RWMutex w programowaniu do zarządzania współdzielonym dostępem do zasobów?

sobes.tech AI

Odpowiedź od AI

Mechanizm RWMutex w Go jest zalecany, gdy masz zasób, do którego mogą jednocześnie odwoływać się liczni czytelnicy, ale zapis musi być wyłączny. RWMutex pozwala wielu gorutynom na jednoczesne czytanie danych bez blokowania się nawzajem, ale blokuje dostęp dla wszystkich podczas zapisu.

To zwiększa wydajność w scenariuszach z częstymi operacjami odczytu i rzadkimi operacjami zapisu.

Przykład użycia:

var mu sync.RWMutex
var data int

func readData() int {
    mu.RLock()         // blokada do odczytu
    defer mu.RUnlock()
    return data
}

func writeData(val int) {
    mu.Lock()          // wyłączna blokada do zapisu
    defer mu.Unlock()
    data = val
}

Używaj RWMutex, gdy:

  • Odczyt odbywa się często i równolegle.
  • Zapis jest rzadki i wymaga wyłącznego dostępu.

Jeśli operacje odczytu i zapisu są mniej więcej równe pod względem częstotliwości, lub ważna jest prostota, lepiej użyć zwykłego Mutex.