Junior — Middle
Каква е разликата между използването на стандартен мьютекс и мьютекс с възможност за четене и писане (RWMutex)?
sobes.tech AI
Отговор от AI
Стандартният mutex (sync.Mutex) в Go осигурява ексклузивен достъп до ресурс: във всеки момент само една горутина може да го придобие, останалите чакат.
Mutex с възможност за четене и писане (sync.RWMutex) позволява:
- Няколко горутини могат едновременно да придобият mutex за четене (RLock), ако няма писател.
- Само една горутина може да придобие mutex за писане (Lock), като блокира всички читатели и други писатели.
Това увеличава производителността в сценарии, където операциите за четене са много по-чести от писането, тъй като четенето не блокира другите.
Пример:
var mu sync.RWMutex
var data int
// Четене
mu.RLock()
fmt.Println(data)
mu.RUnlock()
// Писане
mu.Lock()
data = 42
mu.Unlock()
Ако използвате обикновен Mutex, дори и четенето ще блокира другите, което намалява паралелизма.