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.