Junior — Middle
Czym różni się użycie standardowego mutexa od mutexa z możliwością czytania i pisania (RWMutex)?
sobes.tech AI
Odpowiedź od AI
Standardowy mutex (sync.Mutex) w Go zapewnia wyłączny dostęp do zasobu: w każdym momencie tylko jedna gorutyna może go zablokować, pozostałe czekają.
Mutex z możliwością odczytu i zapisu (sync.RWMutex) pozwala:
- Kilka gorutyn może jednocześnie blokować mutex na odczyt (RLock), jeśli nie ma pisarza.
- Tylko jedna gorutyna może zablokować mutex na zapis (Lock), blokując wszystkich czytelników i innych pisarzy.
To zwiększa wydajność w scenariuszach, gdzie operacji odczytu jest znacznie więcej niż zapisów, ponieważ odczyty nie blokują się nawzajem.
Przykład:
var mu sync.RWMutex
var data int
// Odczyt
mu.RLock()
fmt.Println(data)
mu.RUnlock()
// Zapis
mu.Lock()
data = 42
mu.Unlock()
Jeśli użyje się zwykłego Mutex, nawet odczyty będą się blokować nawzajem, co zmniejsza paralelizm.