Назад к вопросам
Middle+
3
Расскажите про Mutex и RWMutex, чем они отличаются и где предпочитаете использовать.
Компании, где спрашивали
Servicepipi
Ответ от нейросети
sobes.tech AI
Mutex (взаимное исключение) и RWMutex (мьютекс с разделением на чтение и запись) — это механизмы синхронизации в Go для защиты общих ресурсов от одновременного доступа.
-
Mutex блокирует доступ к ресурсу полностью: только один горутина может владеть мьютексом в любой момент. Используется, когда операции чтения и записи не разделяются.
-
RWMutex позволяет нескольким горутинам одновременно читать ресурс (RLock), но блокирует доступ при записи (Lock). Запись эксклюзивна — пока идёт запись, чтение и другие записи блокируются.
Где использовать:
- Если у вас много операций чтения и мало записи, RWMutex повышает производительность, позволяя параллельные чтения.
- Если операции записи и чтения примерно равны или сложная логика, проще и безопаснее использовать обычный Mutex.
Пример использования RWMutex:
var mu sync.RWMutex
var data int
func readData() int {
mu.RLock()
defer mu.RUnlock()
return data
}
func writeData(val int) {
mu.Lock()
defer mu.Unlock()
data = val
}
Таким образом, выбор между Mutex и RWMutex зависит от характера нагрузки и требований к производительности.