Назад к вопросам
Senior
3
Что такое Mutex и RWMutex? Чем отличаются?
Компании, где спрашивали
Lenta Tech
Ответ от нейросети
sobes.tech AI
Mutex (в Go — sync.Mutex) — это примитив синхронизации, который обеспечивает эксклюзивный доступ к ресурсу. Когда один горутина захватывает Mutex, другие горутины, пытающиеся его захватить, блокируются до освобождения.
RWMutex (sync.RWMutex) — расширение Mutex, позволяющее разделять доступ на чтение и запись. Он позволяет нескольким горутинам одновременно читать данные (RLock), но запись (Lock) требует эксклюзивного доступа и блокирует всех читателей и писателей.
Отличия:
- Mutex блокирует всех, кто пытается получить доступ, пока он захвачен.
- RWMutex позволяет множеству читателей работать параллельно, но запись блокирует всех.
Пример:
var mu sync.RWMutex
var data int
// Чтение
mu.RLock()
fmt.Println(data)
mu.RUnlock()
// Запись
mu.Lock()
data = 42
mu.Unlock()